| Index: extensions/browser/extension_web_contents_observer.h
|
| diff --git a/extensions/browser/extension_web_contents_observer.h b/extensions/browser/extension_web_contents_observer.h
|
| index c92ad9c0a0478f21adb4fd49af821040d3378570..504170c8a438abf2b799d4d575418ed600dd3001 100644
|
| --- a/extensions/browser/extension_web_contents_observer.h
|
| +++ b/extensions/browser/extension_web_contents_observer.h
|
| @@ -29,6 +29,22 @@ class Extension;
|
| // WebContents. It must be a subclass so that creating an instance via
|
| // content::WebContentsUserData::CreateForWebContents() provides an object of
|
| // the correct type. For an example, see ChromeExtensionWebContentsObserver.
|
| +//
|
| +// This class is responsible for maintaining the registrations of extension
|
| +// frames with the ProcessManager. Only frames in an extension process are
|
| +// registered. If out-of-process frames are enabled, every frame hosts a
|
| +// chrome-extension: page. Otherwise non-extension frames may erroneously be
|
| +// registered, but only briefly until they are correctly classified. This is
|
| +// achieved using the following notifications:
|
| +// 1. RenderFrameCreated - registers all new frames in extension processes.
|
| +// 2. DidCommitProvisionalLoadForFrame - unregisters non-extension frames.
|
| +// 3. DidNavigateAnyFrame - registers extension frames if they had been
|
| +// unregistered.
|
| +//
|
| +// With OOPIF only the first notification is necessary.
|
| +// Without OOPIF, non-extension frames created by the Chrome extension are also
|
| +// registered at RenderFrameCreated. When the non-extension page is committed,
|
| +// we detect that the unexpected URL and unregister the frame.
|
| class ExtensionWebContentsObserver
|
| : public content::WebContentsObserver,
|
| public ExtensionFunctionDispatcher::Delegate {
|
| @@ -60,6 +76,13 @@ class ExtensionWebContentsObserver
|
|
|
| void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
|
| void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override;
|
| + void DidCommitProvisionalLoadForFrame(
|
| + content::RenderFrameHost* render_frame_host,
|
| + const GURL& url,
|
| + ui::PageTransition transition_type) override;
|
| + void DidNavigateAnyFrame(content::RenderFrameHost* render_frame_host,
|
| + const content::LoadCommittedDetails& details,
|
| + const content::FrameNavigateParams& params) override;
|
|
|
| // Subclasses should call this first before doing their own message handling.
|
| bool OnMessageReceived(const IPC::Message& message,
|
| @@ -77,8 +100,12 @@ class ExtensionWebContentsObserver
|
|
|
| // Returns the extension associated with the given |render_frame_host|, or
|
| // null if there is none.
|
| + // If |verify_url| is false, only the SiteInstance is taken into account.
|
| + // If |verify_url| is true, the frame's last committed URL is also used to
|
| + // improve the classification of the frame.
|
| const Extension* GetExtensionFromFrame(
|
| - content::RenderFrameHost* render_frame_host) const;
|
| + content::RenderFrameHost* render_frame_host,
|
| + bool verify_url) const;
|
|
|
| // TODO(devlin): Remove these once callers are updated to use the FromFrame
|
| // equivalents.
|
|
|