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

Side by Side Diff: headless/app/headless_shell.cc

Issue 2181413002: [headless] Remove default browser context. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More fixes Created 4 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <iostream> 5 #include <iostream>
6 #include <memory> 6 #include <memory>
7 #include <string> 7 #include <string>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 13 matching lines...) Expand all
24 #include "headless/public/headless_devtools_client.h" 24 #include "headless/public/headless_devtools_client.h"
25 #include "headless/public/headless_devtools_target.h" 25 #include "headless/public/headless_devtools_target.h"
26 #include "headless/public/headless_web_contents.h" 26 #include "headless/public/headless_web_contents.h"
27 #include "net/base/file_stream.h" 27 #include "net/base/file_stream.h"
28 #include "net/base/io_buffer.h" 28 #include "net/base/io_buffer.h"
29 #include "net/base/ip_address.h" 29 #include "net/base/ip_address.h"
30 #include "net/base/net_errors.h" 30 #include "net/base/net_errors.h"
31 #include "ui/gfx/geometry/size.h" 31 #include "ui/gfx/geometry/size.h"
32 32
33 using headless::HeadlessBrowser; 33 using headless::HeadlessBrowser;
34 using headless::HeadlessBrowserContext;
34 using headless::HeadlessDevToolsClient; 35 using headless::HeadlessDevToolsClient;
35 using headless::HeadlessWebContents; 36 using headless::HeadlessWebContents;
36 namespace page = headless::page; 37 namespace page = headless::page;
37 namespace runtime = headless::runtime; 38 namespace runtime = headless::runtime;
38 39
39 namespace { 40 namespace {
40 // Address where to listen to incoming DevTools connections. 41 // Address where to listen to incoming DevTools connections.
41 const char kDevToolsHttpServerAddress[] = "127.0.0.1"; 42 const char kDevToolsHttpServerAddress[] = "127.0.0.1";
42 // Default file name for screenshot. Can be overriden by "--screenshot" switch. 43 // Default file name for screenshot. Can be overriden by "--screenshot" switch.
43 const char kDefaultScreenshotFileName[] = "screenshot.png"; 44 const char kDefaultScreenshotFileName[] = "screenshot.png";
44 } 45 }
45 46
46 // A sample application which demonstrates the use of the headless API. 47 // A sample application which demonstrates the use of the headless API.
47 class HeadlessShell : public HeadlessWebContents::Observer, page::Observer { 48 class HeadlessShell : public HeadlessWebContents::Observer, page::Observer {
48 public: 49 public:
49 HeadlessShell() 50 HeadlessShell()
50 : browser_(nullptr), 51 : browser_(nullptr),
51 devtools_client_(HeadlessDevToolsClient::Create()), 52 devtools_client_(HeadlessDevToolsClient::Create()),
52 web_contents_(nullptr), 53 web_contents_(nullptr),
53 processed_page_ready_(false) {} 54 processed_page_ready_(false) {}
54 ~HeadlessShell() override {} 55 ~HeadlessShell() override {}
55 56
56 void OnStart(HeadlessBrowser* browser) { 57 void OnStart(HeadlessBrowser* browser) {
57 browser_ = browser; 58 browser_ = browser;
58 59
59 HeadlessWebContents::Builder builder(browser_->CreateWebContentsBuilder()); 60 browser_context_ = browser_->CreateBrowserContextBuilder().Build();
61
62 HeadlessWebContents::Builder builder(
63 browser_context_->CreateWebContentsBuilder());
60 base::CommandLine::StringVector args = 64 base::CommandLine::StringVector args =
61 base::CommandLine::ForCurrentProcess()->GetArgs(); 65 base::CommandLine::ForCurrentProcess()->GetArgs();
62 66
63 if (!args.empty() && !args[0].empty()) 67 if (!args.empty() && !args[0].empty())
64 builder.SetInitialURL(GURL(args[0])); 68 builder.SetInitialURL(GURL(args[0]));
65 69
66 web_contents_ = builder.Build(); 70 web_contents_ = builder.Build();
67 if (!web_contents_) { 71 if (!web_contents_) {
68 LOG(ERROR) << "Navigation failed"; 72 LOG(ERROR) << "Navigation failed";
69 browser_->Shutdown(); 73 browser_->Shutdown();
70 return; 74 return;
71 } 75 }
72 web_contents_->AddObserver(this); 76 web_contents_->AddObserver(this);
73 } 77 }
74 78
75 void Shutdown() { 79 void Shutdown() {
76 if (!web_contents_) 80 if (!web_contents_)
77 return; 81 return;
78 if (!RemoteDebuggingEnabled()) { 82 if (!RemoteDebuggingEnabled()) {
79 devtools_client_->GetPage()->RemoveObserver(this); 83 devtools_client_->GetPage()->RemoveObserver(this);
80 web_contents_->GetDevToolsTarget()->DetachClient(devtools_client_.get()); 84 web_contents_->GetDevToolsTarget()->DetachClient(devtools_client_.get());
81 } 85 }
82 web_contents_->RemoveObserver(this); 86 web_contents_->RemoveObserver(this);
83 web_contents_ = nullptr; 87 web_contents_ = nullptr;
88 browser_context_.reset();
84 browser_->Shutdown(); 89 browser_->Shutdown();
85 } 90 }
86 91
87 // HeadlessWebContents::Observer implementation: 92 // HeadlessWebContents::Observer implementation:
88 void DevToolsTargetReady() override { 93 void DevToolsTargetReady() override {
89 if (RemoteDebuggingEnabled()) 94 if (RemoteDebuggingEnabled())
90 return; 95 return;
91 web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get()); 96 web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
92 devtools_client_->GetPage()->AddObserver(this); 97 devtools_client_->GetPage()->AddObserver(this);
93 devtools_client_->GetPage()->Enable(); 98 devtools_client_->GetPage()->Enable();
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 return command_line.HasSwitch(switches::kRemoteDebuggingPort); 278 return command_line.HasSwitch(switches::kRemoteDebuggingPort);
274 } 279 }
275 280
276 private: 281 private:
277 GURL url_; 282 GURL url_;
278 HeadlessBrowser* browser_; // Not owned. 283 HeadlessBrowser* browser_; // Not owned.
279 std::unique_ptr<HeadlessDevToolsClient> devtools_client_; 284 std::unique_ptr<HeadlessDevToolsClient> devtools_client_;
280 HeadlessWebContents* web_contents_; 285 HeadlessWebContents* web_contents_;
281 bool processed_page_ready_; 286 bool processed_page_ready_;
282 std::unique_ptr<net::FileStream> screenshot_file_stream_; 287 std::unique_ptr<net::FileStream> screenshot_file_stream_;
288 std::unique_ptr<HeadlessBrowserContext> browser_context_;
283 289
284 DISALLOW_COPY_AND_ASSIGN(HeadlessShell); 290 DISALLOW_COPY_AND_ASSIGN(HeadlessShell);
285 }; 291 };
286 292
287 int main(int argc, const char** argv) { 293 int main(int argc, const char** argv) {
288 headless::RunChildProcessIfNeeded(argc, argv); 294 headless::RunChildProcessIfNeeded(argc, argv);
289 HeadlessShell shell; 295 HeadlessShell shell;
290 HeadlessBrowser::Options::Builder builder(argc, argv); 296 HeadlessBrowser::Options::Builder builder(argc, argv);
291 297
292 // Enable devtools if requested. 298 // Enable devtools if requested.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 if (command_line.HasSwitch(switches::kHostResolverRules)) { 338 if (command_line.HasSwitch(switches::kHostResolverRules)) {
333 builder.SetHostResolverRules( 339 builder.SetHostResolverRules(
334 command_line.GetSwitchValueASCII(switches::kHostResolverRules)); 340 command_line.GetSwitchValueASCII(switches::kHostResolverRules));
335 } 341 }
336 342
337 if (command_line.HasSwitch(headless::switches::kUseGL)) { 343 if (command_line.HasSwitch(headless::switches::kUseGL)) {
338 builder.SetGLImplementation( 344 builder.SetGLImplementation(
339 command_line.GetSwitchValueASCII(headless::switches::kUseGL)); 345 command_line.GetSwitchValueASCII(headless::switches::kUseGL));
340 } 346 }
341 347
348 if (command_line.HasSwitch(headless::switches::kUserDataDir)) {
349 builder.SetUserDataDir(
350 command_line.GetSwitchValuePath(headless::switches::kUserDataDir));
351 }
352
342 return HeadlessBrowserMain( 353 return HeadlessBrowserMain(
343 builder.Build(), 354 builder.Build(),
344 base::Bind(&HeadlessShell::OnStart, base::Unretained(&shell))); 355 base::Bind(&HeadlessShell::OnStart, base::Unretained(&shell)));
345 } 356 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698