// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_ #define EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_ #include <map> #include <string> #include "base/compiler_specific.h" #include "base/memory/raw_ptr.h" #include "base/types/pass_key.h" #include "components/sessions/core/session_id.h" #include "content/public/browser/web_contents_observer.h" #include "extensions/browser/extension_function_dispatcher.h" #include "extensions/common/mojom/frame.mojom.h" #include "mojo/public/cpp/bindings/associated_remote.h" namespace content { class BrowserContext; class RenderFrameHost; class WebContents; } namespace sessions { class SessionTabHelper; } namespace extensions { class Extension; class ExtensionFrameHost; // A web contents observer used for renderer and extension processes. Grants the // renderer access to certain URL scheme patterns for extensions and notifies // the renderer that the extension was loaded. // // Extension system embedders must create an instance for every 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. // // 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. // With OOPIF only the first notification is sufficient in most cases, except // for sandboxed frames with a unique origin. class ExtensionWebContentsObserver : public content::WebContentsObserver, public ExtensionFunctionDispatcher::Delegate { … }; } // namespace extensions #endif // EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_