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

Unified Diff: headless/lib/browser/headless_browser_impl.cc

Issue 2119063002: Add commands to manage tabs and contexts to Browser Domain (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a check to prevent Browser.closeContext from closing a context that is in use. Created 4 years, 5 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
Index: headless/lib/browser/headless_browser_impl.cc
diff --git a/headless/lib/browser/headless_browser_impl.cc b/headless/lib/browser/headless_browser_impl.cc
index a3eb1ba37406e9ec9a87b979cff65bb23781b0ed..f7f54d3de0c75e7a593b91c968c0b433682959cb 100644
--- a/headless/lib/browser/headless_browser_impl.cc
+++ b/headless/lib/browser/headless_browser_impl.cc
@@ -65,6 +65,14 @@ HeadlessBrowserImpl::CreateBrowserContextBuilder() {
return HeadlessBrowserContext::Builder(this);
}
+void HeadlessBrowserImpl::AddObserver(Observer* observer) {
+ observers_.insert(observer);
+}
+
+void HeadlessBrowserImpl::RemoveObserver(Observer* observer) {
+ observers_.erase(observer);
+}
+
HeadlessWebContents* HeadlessBrowserImpl::CreateWebContents(
HeadlessWebContents::Builder* builder) {
DCHECK(BrowserMainThread()->BelongsToCurrentThread());
@@ -108,7 +116,7 @@ std::vector<HeadlessWebContents*> HeadlessBrowserImpl::GetAllWebContents() {
result.reserve(web_contents_.size());
for (const auto& web_contents_pair : web_contents_) {
- result.push_back(web_contents_pair.first);
+ result.push_back(web_contents_pair.second.get());
}
return result;
@@ -142,17 +150,30 @@ void HeadlessBrowserImpl::RunOnStartCallback() {
HeadlessWebContentsImpl* HeadlessBrowserImpl::RegisterWebContents(
std::unique_ptr<HeadlessWebContentsImpl> web_contents) {
+ DCHECK(BrowserMainThread()->BelongsToCurrentThread());
DCHECK(web_contents);
HeadlessWebContentsImpl* unowned_web_contents = web_contents.get();
web_contents_[unowned_web_contents] = std::move(web_contents);
+ for (auto it = observers_.begin(); it != observers_.end();) {
+ // Pre-increment it because the observer may unregister itself.
+ Observer* observer = *it++;
+ observer->HeadlessWebContentsCreated(unowned_web_contents);
+ }
return unowned_web_contents;
}
void HeadlessBrowserImpl::DestroyWebContents(
HeadlessWebContentsImpl* web_contents) {
- auto it = web_contents_.find(web_contents);
- DCHECK(it != web_contents_.end());
- web_contents_.erase(it);
+ DCHECK(BrowserMainThread()->BelongsToCurrentThread());
+ auto find_it = web_contents_.find(web_contents);
+ DCHECK(find_it != web_contents_.end());
+ HeadlessWebContents* headless_web_contents = find_it->second.get();
+ web_contents_.erase(find_it);
+ for (auto it = observers_.begin(); it != observers_.end();) {
+ // Pre-increment it because the observer may unregister itself.
+ Observer* observer = *it++;
+ observer->HeadlessWebContentsDestroyed(headless_web_contents);
+ }
}
void HeadlessBrowserImpl::SetOptionsForTesting(

Powered by Google App Engine
This is Rietveld 408576698