| Index: chrome/browser/managed_mode/managed_mode_navigation_observer.h
|
| diff --git a/chrome/browser/managed_mode/managed_mode_navigation_observer.h b/chrome/browser/managed_mode/managed_mode_navigation_observer.h
|
| index 06e0f8404dd22db32518547433d5772600d873cd..3db06225a0359c6af1c10e40a44356f6000d12df 100644
|
| --- a/chrome/browser/managed_mode/managed_mode_navigation_observer.h
|
| +++ b/chrome/browser/managed_mode/managed_mode_navigation_observer.h
|
| @@ -5,6 +5,9 @@
|
| #ifndef CHROME_BROWSER_MANAGED_MODE_MANAGED_MODE_NAVIGATION_OBSERVER_H_
|
| #define CHROME_BROWSER_MANAGED_MODE_MANAGED_MODE_NAVIGATION_OBSERVER_H_
|
|
|
| +#include <set>
|
| +
|
| +#include "base/values.h"
|
| #include "content/public/browser/web_contents_observer.h"
|
| #include "content/public/browser/web_contents_user_data.h"
|
|
|
| @@ -17,14 +20,84 @@ class ManagedModeNavigationObserver
|
| public:
|
| virtual ~ManagedModeNavigationObserver();
|
|
|
| + // Sets the specific infobar as dismissed.
|
| void WarnInfobarDismissed();
|
| + void PreviewInfobarDismissed();
|
| +
|
| + // Sets the state of the Observer from the outside.
|
| + void SetStateToRecordingAfterPreview();
|
| +
|
| + // Returns whether the user should be allowed to navigate to this URL after
|
| + // he has clicked "Preview" on the interstitial.
|
| + bool CanTemporarilyNavigateHost(const GURL& url);
|
| +
|
| + // Clears the state recorded in the observer.
|
| + void ClearObserverState();
|
| +
|
| + // Whitelists exact URLs for redirects and host patterns for the final URL.
|
| + // If the URL uses HTTPS, whitelists only the host on HTTPS. Clears the
|
| + // observer state after adding the URLs.
|
| + void AddSavedURLsToWhitelistAndClearState();
|
|
|
| private:
|
| + // An observer can be in one of the following states:
|
| + // - RECORDING_URLS_BEFORE_PREVIEW: This is the initial state when the user
|
| + // navigates to a new page. In this state the navigated URLs that should be
|
| + // blocked are recorded. The Observer moves to the next state when an
|
| + // interstitial was shown and the user clicked "Preview" on the interstitial.
|
| + // - RECORDING_URLS_AFTER_PREVIEW: URLs that should be blocked are
|
| + // still recorded while the page redirects. The Observer moves to the next
|
| + // state after the page finished redirecting (DidNavigateMainFrame gets
|
| + // called).
|
| + // - NOT_RECORDING_URLS: The redirects have completed and blocked URLs are
|
| + // no longer being recorded.
|
| + enum ObserverState {
|
| + RECORDING_URLS_BEFORE_PREVIEW,
|
| + RECORDING_URLS_AFTER_PREVIEW,
|
| + NOT_RECORDING_URLS,
|
| + };
|
| +
|
| friend class content::WebContentsUserData<ManagedModeNavigationObserver>;
|
|
|
| explicit ManagedModeNavigationObserver(content::WebContents* web_contents);
|
|
|
| + // Adding the temporary exception stops the ResourceThrottle from showing
|
| + // an interstitial for this RenderView. This allows the user to navigate
|
| + // around on the website after clicking preview.
|
| + void AddTemporaryException();
|
| + void RemoveTemporaryException();
|
| +
|
| + void AddURLToPatternList(const GURL& url);
|
| + void AddURLAsLastPattern(const GURL& url);
|
| +
|
| // content::WebContentsObserver implementation.
|
| + // An example regarding the order in which these events take place for
|
| + // google.com in our case is as follows:
|
| + // 1. User types in google.com and clicks enter.
|
| + // -> NavigateToPendingEntry: http://google.com
|
| + // -> DidStartProvisionalLoadForFrame http://google.com
|
| + // -> ProvisionalChangeToMainFrameUrl http://google.com
|
| + // 2. Interstitial is shown to the user. User clicks "Preview".
|
| + // -> ProvisionalChangeToMainFrameUrl http://www.google.com (redirect)
|
| + // -> DidCommitProvisionalLoadForFrame http://www.google.com (redirect)
|
| + // -> DidNavigateMainFrame http://www.google.com
|
| + // 3. Page is shown.
|
| + virtual void NavigateToPendingEntry(
|
| + const GURL& url,
|
| + content::NavigationController::ReloadType reload_type) OVERRIDE;
|
| + virtual void DidNavigateMainFrame(
|
| + const content::LoadCommittedDetails& details,
|
| + const content::FrameNavigateParams& params) OVERRIDE;
|
| + virtual void DidStartProvisionalLoadForFrame(
|
| + int64 frame_id,
|
| + int64 parent_frame_id,
|
| + bool is_main_frame,
|
| + const GURL& url,
|
| + bool is_error_page,
|
| + content::RenderViewHost* render_view_host) OVERRIDE;
|
| + virtual void ProvisionalChangeToMainFrameUrl(
|
| + const GURL& url,
|
| + content::RenderViewHost* render_view_host) OVERRIDE;
|
| virtual void DidCommitProvisionalLoadForFrame(
|
| int64 frame_id,
|
| bool is_main_frame,
|
| @@ -37,6 +110,13 @@ class ManagedModeNavigationObserver
|
|
|
| // Owned by the InfoBarService, which has the same lifetime as this object.
|
| InfoBarDelegate* warn_infobar_delegate_;
|
| + InfoBarDelegate* preview_infobar_delegate_;
|
| +
|
| + ObserverState state_;
|
| + std::set<GURL> navigated_urls_;
|
| + GURL last_url_;
|
| +
|
| + int last_allowed_page_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ManagedModeNavigationObserver);
|
| };
|
|
|