// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/memory/weak_ptr.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
char kSampleChromePages[] = "[ {\n"
" \"description\": \"\",\n"
" \"devtoolsFrontendUrl\": \"/devtools/devtools.html?"
- "ws=/devtools/page/755DE5C9-D49F-811D-0693-51B8E15C80D2\",\n"
- " \"id\": \"755DE5C9-D49F-811D-0693-51B8E15C80D2\",\n"
+ "ws=/devtools/page/0\",\n"
+ " \"id\": \"0\",\n"
" \"title\": \"The Chromium Projects\",\n"
" \"type\": \"page\",\n"
" \"url\": \"http://www.chromium.org/\",\n"
" \"webSocketDebuggerUrl\": \""
- "ws:///devtools/page/755DE5C9-D49F-811D-0693-51B8E15C80D2\"\n"
+ "ws:///devtools/page/0\"\n"
"} ]";
-char kSampleChromeBetaPages[] = "[]";
+char kSampleChromeBetaPages[] = "[ {\n"
+ " \"description\": \"\",\n"
+ " \"devtoolsFrontendUrl\": \"/devtools/devtools.html?"
+ "ws=/devtools/page/0\",\n"
+ " \"id\": \"0\",\n"
+ " \"title\": \"The Chromium Projects\",\n"
+ " \"type\": \"page\",\n"
+ " \"url\": \"http://www.chromium.org/\",\n"
+ " \"webSocketDebuggerUrl\": \""
+ "ws:///devtools/page/0\"\n"
+ "} ]";
char kSampleWebViewPages[] = "[ {\n"
" \"description\": \"{\\\"attached\\\":false,\\\"empty\\\":false,"
scoped_refptr<net::GrowableIOBuffer> output_buffer_;
int bytes_to_write_;
bool read_closed_;
+ base::WeakPtrFactory<Connection> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(Connection);
};
ParserFactory factory_;
scoped_ptr<net::TCPServerSocket> socket_;
scoped_ptr<net::StreamSocket> client_socket_;
+ base::WeakPtrFactory<SimpleHttpServer> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(SimpleHttpServer);
};
SimpleHttpServer::SimpleHttpServer(const ParserFactory& factory,
net::IPEndPoint endpoint)
: factory_(factory),
- socket_(new net::TCPServerSocket(NULL, net::NetLog::Source())) {
+ socket_(new net::TCPServerSocket(NULL, net::NetLog::Source())),
+ weak_factory_(this) {
socket_->Listen(endpoint, 5);
AcceptConnection();
}
input_buffer_(new net::GrowableIOBuffer()),
output_buffer_(new net::GrowableIOBuffer()),
bytes_to_write_(0),
- read_closed_(false) {
+ read_closed_(false),
+ weak_factory_(this) {
input_buffer_->SetCapacity(kBufferSize);
ReadData();
}
// Posting to avoid deep recursion in case of synchronous IO
base::MessageLoop::current()->PostTask(
FROM_HERE,
- base::Bind(&Connection::ReadData, base::Unretained(this)));
+ base::Bind(&Connection::ReadData, weak_factory_.GetWeakPtr()));
}
void SimpleHttpServer::Connection::WriteData() {
output_buffer_->offset() + bytes_to_write_) << "Overflow";
int write_result = socket_->Write(
- output_buffer_,
+ output_buffer_.get(),
bytes_to_write_,
base::Bind(&Connection::OnDataWritten, base::Unretained(this)));
// Posting to avoid deep recursion in case of synchronous IO
base::MessageLoop::current()->PostTask(
FROM_HERE,
- base::Bind(&Connection::WriteData, base::Unretained(this)));
+ base::Bind(&Connection::WriteData, weak_factory_.GetWeakPtr()));
else if (read_closed_)
delete this;
}
base::MessageLoop::current()->PostTask(
FROM_HERE,
base::Bind(&SimpleHttpServer::OnAccepted,
- base::Unretained(this),
+ weak_factory_.GetWeakPtr(),
accept_result));
}