diff --git a/engine/src/flutter/tools/debugger/debugger.cc b/engine/src/flutter/tools/debugger/debugger.cc index 52d00447db..e9a77a2f5c 100644 --- a/engine/src/flutter/tools/debugger/debugger.cc +++ b/engine/src/flutter/tools/debugger/debugger.cc @@ -16,6 +16,7 @@ #include "mojo/services/window_manager/window_manager_delegate.h" #include "sky/tools/debugger/focus_rules.h" #include "sky/tools/debugger/debugger.mojom.h" +#include "sky/viewer/services/inspector.mojom.h" namespace sky { @@ -58,7 +59,7 @@ class SkyDebugger : public mojo::ApplicationDelegate, mojo::ViewManager* view_manager, mojo::View* root, mojo::ServiceProviderImpl* exported_services, - scoped_ptr remote_service_provider) override { + scoped_ptr imported_services) override { view_manager_ = view_manager; root_ = root; @@ -104,10 +105,19 @@ class SkyDebugger : public mojo::ApplicationDelegate, // We can get Navigate commands before we've actually been // embedded into the view and content_ created. // Just save the last one. - if (content_) - content_->Embed(url); - else + if (content_) { + scoped_ptr exported_services( + new mojo::ServiceProviderImpl()); + viewer_services_ = content_->Embed(url, exported_services.Pass()); + } else { pending_url_ = url; + } + } + + virtual void InjectInspector() override { + InspectorServicePtr inspector_service; + mojo::ConnectToService(viewer_services_.get(), &inspector_service); + inspector_service->Inject(); } scoped_ptr window_manager_app_; @@ -117,6 +127,8 @@ class SkyDebugger : public mojo::ApplicationDelegate, mojo::View* content_; std::string pending_url_; + scoped_ptr viewer_services_; + DISALLOW_COPY_AND_ASSIGN(SkyDebugger); }; diff --git a/engine/src/flutter/tools/debugger/debugger.mojom b/engine/src/flutter/tools/debugger/debugger.mojom index 067a160569..df3399e27c 100644 --- a/engine/src/flutter/tools/debugger/debugger.mojom +++ b/engine/src/flutter/tools/debugger/debugger.mojom @@ -6,6 +6,7 @@ module sky { interface Debugger { NavigateToURL(string url); + InjectInspector(); }; } diff --git a/engine/src/flutter/tools/debugger/prompt/prompt.cc b/engine/src/flutter/tools/debugger/prompt/prompt.cc index d411c82618..6bcc464b34 100644 --- a/engine/src/flutter/tools/debugger/prompt/prompt.cc +++ b/engine/src/flutter/tools/debugger/prompt/prompt.cc @@ -73,6 +73,10 @@ class Prompt : public mojo::ApplicationDelegate { Reload(); return true; } + if (command == "inspect") { + Inspect(); + return true; + } if (command.size() == 1) { char c = command[0]; if (c == 'h') @@ -111,16 +115,25 @@ class Prompt : public mojo::ApplicationDelegate { << "Sky Debugger" << std::endl << "============" << std::endl << "Type a URL to load in the debugger, enter to reload." << std::endl - << "Commands: help -- Help" << std::endl - << " trace -- Capture a trace" << std::endl - << " reload -- Reload the current page" << std::endl - << " q -- Quit" << std::endl; + << "Commands: help -- Help" << std::endl + << " trace -- Capture a trace" << std::endl + << " reload -- Reload the current page" << std::endl + << " inspect -- Inspect the current page" << std::endl + << " q -- Quit" << std::endl; } void Reload() { debugger_->NavigateToURL(url_); } + void Inspect() { + debugger_->InjectInspector(); + std::cout + << "Open the following URL in Chrome:" << std::endl + << "chrome-devtools://devtools/bundled/devtools.html?ws=localhost:9898" + << std::endl; + } + void Quit() { std::cout << "quitting" << std::endl; exit(0);