Chromium Code Reviews| Index: chrome/browser/managed_mode/managed_mode_navigation_observer.cc |
| diff --git a/chrome/browser/managed_mode/managed_mode_navigation_observer.cc b/chrome/browser/managed_mode/managed_mode_navigation_observer.cc |
| index 91c3ac445fbb95052be8d710802a1584b9f2b91e..2d192f8ff51b1f64a1b8082f0f20426dea7326db 100644 |
| --- a/chrome/browser/managed_mode/managed_mode_navigation_observer.cc |
| +++ b/chrome/browser/managed_mode/managed_mode_navigation_observer.cc |
| @@ -256,6 +256,7 @@ void ManagedModePreviewInfobarDelegate::InfoBarDismissed() { |
| DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagedModeNavigationObserver); |
| ManagedModeNavigationObserver::~ManagedModeNavigationObserver() { |
| + TabWebContentsTracker::RemoveObserver(this); |
| RemoveTemporaryException(); |
| } |
| @@ -267,6 +268,7 @@ ManagedModeNavigationObserver::ManagedModeNavigationObserver( |
| state_(RECORDING_URLS_BEFORE_PREVIEW), |
| is_elevated_(false), |
| last_allowed_page_(-1), |
| + observer_state_cleared_(false), |
| finished_redirects_(false) { |
| Profile* profile = |
| Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| @@ -274,6 +276,39 @@ ManagedModeNavigationObserver::ManagedModeNavigationObserver( |
| if (!managed_user_service_->ProfileIsManaged()) |
| is_elevated_ = true; |
| url_filter_ = managed_user_service_->GetURLFilterForUIThread(); |
| + TabWebContentsTracker::AddObserver(this); |
| +} |
| + |
| +void ManagedModeNavigationObserver::OnTabReplacedAt( |
| + TabStripModel* tab_strip_model, |
| + content::WebContents* old_contents, |
| + content::WebContents* new_contents, |
| + int index) { |
| + if (new_contents == web_contents()) { |
|
Bernhard Bauer
2013/04/26 16:30:10
Early-return otherwise?
|
| + // First, copy over some data of the old navigation observer. This only |
|
Bernhard Bauer
2013/04/26 16:30:10
This seems...brittle. I'm okay with it, but I coul
Adrian Kuegel
2013/04/29 08:11:15
But if I copy the whole object over, it would stil
Bernhard Bauer
2013/04/29 08:39:38
Like I said, I'm okay with this, I just want to ke
|
| + // applies if the ClearObserverState function was not called on the new |
|
Adrian Kuegel
2013/04/26 15:52:27
Reassigning the ManagedModeNavigationObserver to a
|
| + // navigation observer, because that would reset the data we are about to |
| + // copy. |
| + if (!observer_state_cleared_) { |
| + ManagedModeNavigationObserver* observer = |
| + ManagedModeNavigationObserver::FromWebContents(old_contents); |
| + navigated_urls_.insert(observer->navigated_urls_.begin(), |
| + observer->navigated_urls_.end()); |
| + if (last_allowed_page_ < 0) |
| + last_allowed_page_ = observer->last_allowed_page_; |
| + if (observer->warn_infobar_delegate_ && !warn_infobar_delegate_) { |
| + warn_infobar_delegate_ = ManagedModeWarningInfobarDelegate::Create( |
| + InfoBarService::FromWebContents(web_contents()), |
| + last_allowed_page_); |
| + } |
| + if (observer->preview_infobar_delegate_ && !preview_infobar_delegate_) { |
| + preview_infobar_delegate_ = ManagedModePreviewInfobarDelegate::Create( |
|
Bernhard Bauer
2013/04/26 16:30:10
Doesn't InfobarTabHelper or something similar take
Adrian Kuegel
2013/04/29 08:11:15
Yes, that is possible. I guess I can remove that c
|
| + InfoBarService::FromWebContents(web_contents())); |
| + } |
| + // We don't need to copy |state_| and |finished_redirects_|, because that |
| + // should be up-to-date. |
| + } |
| + } |
| } |
| void ManagedModeNavigationObserver::AddTemporaryException() { |
| @@ -387,6 +422,7 @@ void ManagedModeNavigationObserver::ClearObserverState() { |
| infobar_service->RemoveInfoBar(preview_infobar_delegate_); |
| preview_infobar_delegate_ = NULL; |
| } |
| + observer_state_cleared_ = true; |
|
Bernhard Bauer
2013/04/26 16:30:10
So you set this to true when we have cleared obser
Adrian Kuegel
2013/04/29 08:11:15
Yes, but that is exactly as expected. This variabl
|
| navigated_urls_.clear(); |
| last_url_ = GURL(); |
| state_ = RECORDING_URLS_BEFORE_PREVIEW; |