Index: headless/lib/browser/headless_devtools_manager_delegate.cc |
diff --git a/headless/lib/browser/headless_devtools_manager_delegate.cc b/headless/lib/browser/headless_devtools_manager_delegate.cc |
index 4d9c8e5cc096fad3ebe0b9af3fa4adf1107a184c..508fc8b8d3663d17138134e811d40a9f5f8dc76f 100644 |
--- a/headless/lib/browser/headless_devtools_manager_delegate.cc |
+++ b/headless/lib/browser/headless_devtools_manager_delegate.cc |
@@ -5,6 +5,7 @@ |
#include "headless/lib/browser/headless_devtools_manager_delegate.h" |
#include <string> |
+#include <utility> |
#include "base/guid.h" |
#include "content/public/browser/web_contents.h" |
@@ -17,7 +18,7 @@ namespace headless { |
HeadlessDevToolsManagerDelegate::HeadlessDevToolsManagerDelegate( |
HeadlessBrowserImpl* browser) |
- : browser_(browser) { |
+ : browser_(browser), weak_ptr_factory_(this) { |
command_map_["Browser.createTarget"] = |
&HeadlessDevToolsManagerDelegate::CreateTarget; |
command_map_["Browser.closeTarget"] = |
@@ -55,6 +56,16 @@ base::DictionaryValue* HeadlessDevToolsManagerDelegate::HandleCommand( |
return result.release(); |
} |
+void HeadlessDevToolsManagerDelegate::Shutdown() { |
+ default_browser_context_.reset(); |
+ browser_context_map_.clear(); |
+} |
+ |
+base::WeakPtr<HeadlessDevToolsManagerDelegate> |
+HeadlessDevToolsManagerDelegate::GetWeakPtr() { |
+ return weak_ptr_factory_.GetWeakPtr(); |
+} |
+ |
std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::CreateTarget( |
const base::DictionaryValue* params) { |
std::string url; |
@@ -65,22 +76,25 @@ std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::CreateTarget( |
params->GetString("browserContextId", &browser_context_id); |
params->GetInteger("width", &width); |
params->GetInteger("height", &height); |
- HeadlessWebContentsImpl* web_contents_impl; |
+ |
+ HeadlessBrowserContext* context; |
auto find_it = browser_context_map_.find(browser_context_id); |
if (find_it != browser_context_map_.end()) { |
- web_contents_impl = HeadlessWebContentsImpl::From( |
- browser_->CreateWebContentsBuilder() |
- .SetInitialURL(GURL(url)) |
- .SetWindowSize(gfx::Size(width, height)) |
- .SetBrowserContext(find_it->second.get()) |
- .Build()); |
+ context = find_it->second.get(); |
} else { |
- web_contents_impl = HeadlessWebContentsImpl::From( |
- browser_->CreateWebContentsBuilder() |
- .SetInitialURL(GURL(url)) |
- .SetWindowSize(gfx::Size(width, height)) |
- .Build()); |
+ if (!default_browser_context_) { |
+ default_browser_context_ = |
+ browser_->CreateBrowserContextBuilder().Build(); |
+ } |
+ context = default_browser_context_.get(); |
} |
+ |
+ HeadlessWebContentsImpl* web_contents_impl = |
+ HeadlessWebContentsImpl::From(context->CreateWebContentsBuilder() |
+ .SetInitialURL(GURL(url)) |
+ .SetWindowSize(gfx::Size(width, height)) |
+ .Build()); |
+ |
return browser::CreateTargetResult::Builder() |
.SetTargetId(web_contents_impl->GetDevtoolsAgentHostId()) |
.Build() |