| Index: headless/app/headless_shell.cc
|
| diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc
|
| index 1031dbd5446b78a4fa95d7981971fc1a9faca677..127c97b2360221e051d21e4fffb51a43295fdd71 100644
|
| --- a/headless/app/headless_shell.cc
|
| +++ b/headless/app/headless_shell.cc
|
| @@ -13,13 +13,18 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "content/public/common/content_switches.h"
|
| #include "headless/app/headless_shell_switches.h"
|
| +#include "headless/public/domains/page.h"
|
| #include "headless/public/headless_browser.h"
|
| +#include "headless/public/headless_devtools_client.h"
|
| +#include "headless/public/headless_devtools_target.h"
|
| #include "headless/public/headless_web_contents.h"
|
| #include "net/base/ip_address.h"
|
| #include "ui/gfx/geometry/size.h"
|
|
|
| using headless::HeadlessBrowser;
|
| +using headless::HeadlessDevToolsClient;
|
| using headless::HeadlessWebContents;
|
| +namespace page = headless::page;
|
|
|
| namespace {
|
| // Address where to listen to incoming DevTools connections.
|
| @@ -29,10 +34,14 @@ const char kDevToolsHttpServerAddress[] = "127.0.0.1";
|
| // A sample application which demonstrates the use of the headless API.
|
| class HeadlessShell : public HeadlessWebContents::Observer {
|
| public:
|
| - HeadlessShell() : browser_(nullptr) {}
|
| - ~HeadlessShell() override {
|
| - if (web_contents_)
|
| - web_contents_->RemoveObserver(this);
|
| + HeadlessShell()
|
| + : browser_(nullptr), devtools_client_(HeadlessDevToolsClient::Create()) {}
|
| + ~HeadlessShell() override {}
|
| +
|
| + void DevToolsTargetReady() override {
|
| + if (!RemoteDebuggingEnabled())
|
| + web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
|
| + // TODO(skyostil): Implement more features to demonstrate the devtools API.
|
| }
|
|
|
| void OnStart(HeadlessBrowser* browser) {
|
| @@ -58,9 +67,9 @@ class HeadlessShell : public HeadlessWebContents::Observer {
|
| }
|
|
|
| void ShutdownIfNeeded() {
|
| - const base::CommandLine& command_line =
|
| - *base::CommandLine::ForCurrentProcess();
|
| - if (!command_line.HasSwitch(switches::kRemoteDebuggingPort)) {
|
| + if (!RemoteDebuggingEnabled()) {
|
| + web_contents_->GetDevToolsTarget()->DetachClient(devtools_client_.get());
|
| + web_contents_->RemoveObserver(this);
|
| web_contents_ = nullptr;
|
| browser_->Shutdown();
|
| }
|
| @@ -71,8 +80,15 @@ class HeadlessShell : public HeadlessWebContents::Observer {
|
| ShutdownIfNeeded();
|
| }
|
|
|
| + bool RemoteDebuggingEnabled() const {
|
| + const base::CommandLine& command_line =
|
| + *base::CommandLine::ForCurrentProcess();
|
| + return command_line.HasSwitch(switches::kRemoteDebuggingPort);
|
| + }
|
| +
|
| private:
|
| HeadlessBrowser* browser_; // Not owned.
|
| + std::unique_ptr<HeadlessDevToolsClient> devtools_client_;
|
| std::unique_ptr<HeadlessWebContents> web_contents_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(HeadlessShell);
|
|
|