Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(293)

Unified Diff: mojo/spy/spy.cc

Issue 648573002: remove websocket server dependency from the mojo spy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: small cleanup Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/spy/spy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/spy/spy.cc
diff --git a/mojo/spy/spy.cc b/mojo/spy/spy.cc
index 8de82290bf65a300fcce2e0f1117137ba5f8db46..d239d64e0b14085b179201ca8ddfe7ae89348197 100644
--- a/mojo/spy/spy.cc
+++ b/mojo/spy/spy.cc
@@ -22,13 +22,10 @@
#include "mojo/spy/common.h"
#include "mojo/spy/public/spy.mojom.h"
#include "mojo/spy/spy_server_impl.h"
-#include "mojo/spy/websocket_server.h"
#include "url/gurl.h"
namespace {
-mojo::WebSocketServer* ws_server = NULL;
-
const size_t kMessageBufSize = 2 * 1024;
const size_t kHandleBufSize = 64;
const int kDefaultWebSocketPort = 42424;
@@ -43,9 +40,11 @@ void CloseHandles(MojoHandle* handles, size_t count) {
class MessageProcessor :
public base::RefCountedThreadSafe<MessageProcessor> {
public:
- MessageProcessor(base::MessageLoopProxy* control_loop_proxy)
+ MessageProcessor(mojo::Spy::WebSocketDelegate* websocket_delegate,
+ base::MessageLoopProxy* control_loop_proxy)
: last_result_(MOJO_RESULT_OK),
bytes_transfered_(0),
+ websocket_delegate_(websocket_delegate),
control_loop_proxy_(control_loop_proxy) {
message_count_[0] = 0;
message_count_[1] = 0;
@@ -115,10 +114,10 @@ class MessageProcessor :
base::WorkerPool::PostTask(
FROM_HERE,
base::Bind(&MessageProcessor::Start,
- this,
- base::Passed(&message_pipe_handle),
- base::Passed(&interceptor),
- url),
+ this,
+ base::Passed(&message_pipe_handle),
+ base::Passed(&interceptor),
+ url),
true);
hbuf.get()[i] = faux_client.release().value();
}
@@ -203,14 +202,19 @@ class MessageProcessor :
}
void LogMessageInfo(void* data, const GURL& url) {
+ if (!websocket_delegate_)
+ return;
+
mojo::MojoMessageData* message_data =
reinterpret_cast<mojo::MojoMessageData*>(data);
if (IsValidMessage(message_data->header)) {
control_loop_proxy_->PostTask(
FROM_HERE,
- base::Bind(&mojo::WebSocketServer::LogMessageInfo,
- base::Unretained(ws_server),
- message_data->header, url, base::Time::Now()));
+ base::Bind(&mojo::Spy::WebSocketDelegate::OnMessage,
+ base::Unretained(websocket_delegate_),
+ message_data,
+ url,
+ base::Time::Now()));
}
}
@@ -218,6 +222,7 @@ class MessageProcessor :
uint32_t bytes_transfered_;
uint32_t message_count_[2];
uint32_t handle_count_[2];
+ mojo::Spy::WebSocketDelegate* websocket_delegate_;
scoped_refptr<base::MessageLoopProxy> control_loop_proxy_;
};
@@ -226,10 +231,12 @@ class SpyInterceptor : public mojo::ApplicationManager::Interceptor {
public:
explicit SpyInterceptor(
scoped_refptr<mojo::SpyServerImpl> spy_server,
- const scoped_refptr<base::MessageLoopProxy>& control_loop_proxy)
+ const scoped_refptr<base::MessageLoopProxy>& control_loop_proxy,
+ mojo::Spy::WebSocketDelegate* websocket_delegate)
: spy_server_(spy_server),
proxy_(base::MessageLoopProxy::current()),
- control_loop_proxy_(control_loop_proxy) {}
+ control_loop_proxy_(control_loop_proxy),
+ websocket_delegate_(websocket_delegate) {}
private:
virtual mojo::ServiceProviderPtr OnConnectToClient(
@@ -247,7 +254,7 @@ class SpyInterceptor : public mojo::ApplicationManager::Interceptor {
CreateMessagePipe(NULL, &faux_client, &interceptor);
scoped_refptr<MessageProcessor> processor =
- new MessageProcessor(control_loop_proxy_.get());
+ new MessageProcessor(websocket_delegate_, control_loop_proxy_.get());
mojo::ScopedMessagePipeHandle real_handle = real_client.PassMessagePipe();
base::WorkerPool::PostTask(
FROM_HERE,
@@ -273,13 +280,12 @@ class SpyInterceptor : public mojo::ApplicationManager::Interceptor {
scoped_refptr<mojo::SpyServerImpl> spy_server_;
scoped_refptr<base::MessageLoopProxy> proxy_;
scoped_refptr<base::MessageLoopProxy> control_loop_proxy_;
+ mojo::Spy::WebSocketDelegate* websocket_delegate_;
};
-void StartWebServer(int port, mojo::ScopedMessagePipeHandle pipe) {
- // TODO(cpu) figure out lifetime of the server. See Spy() dtor.
- ws_server = new mojo::WebSocketServer(port, pipe.Pass());
- ws_server->Start();
-}
+} // namespace
+
+namespace mojo {
struct SpyOptions {
int websocket_port;
@@ -306,28 +312,18 @@ SpyOptions ProcessOptions(const std::string& options) {
return spy_options;
}
-} // namespace
-
-namespace mojo {
-
Spy::Spy(mojo::ApplicationManager* application_manager,
- const std::string& options) {
- SpyOptions spy_options = ProcessOptions(options);
-
+ const std::string& options)
+ : websocket_delegate_(NULL),
+ application_manager_(application_manager),
+ spy_options_(NULL) {
+ spy_options_ = new SpyOptions(ProcessOptions(options));
spy_server_ = new SpyServerImpl();
// Start the tread what will accept commands from the frontend.
control_thread_.reset(new base::Thread("mojo_spy_control_thread"));
base::Thread::Options thread_options(base::MessageLoop::TYPE_IO, 0);
control_thread_->StartWithOptions(thread_options);
- control_thread_->message_loop_proxy()->PostTask(
- FROM_HERE, base::Bind(&StartWebServer,
- spy_options.websocket_port,
- base::Passed(spy_server_->ServerPipe())));
-
- // Start intercepting mojo services.
- application_manager->SetInterceptor(
- new SpyInterceptor(spy_server_, control_thread_->message_loop_proxy()));
}
Spy::~Spy() {
@@ -335,4 +331,19 @@ Spy::~Spy() {
// application_manager and the spy is still unclear hence the leak.
}
+void Spy::SetWebSocketDelegate(WebSocketDelegate* websocket_delegate) {
+ DCHECK(websocket_delegate_ == NULL);
+ websocket_delegate_ = websocket_delegate;
+
+ control_thread_->message_loop_proxy()->PostTask(
+ FROM_HERE,
+ base::Bind(&WebSocketDelegate::Start,
+ base::Unretained(websocket_delegate_),
+ spy_options_->websocket_port,
+ base::Passed(spy_server_->ServerPipe())));
+ // Start intercepting mojo services.
+ application_manager_->SetInterceptor(new SpyInterceptor(
+ spy_server_, control_thread_->message_loop_proxy(), websocket_delegate_));
+}
+
} // namespace mojo
« no previous file with comments | « mojo/spy/spy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698