| 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(
|
|
|