| Index: extensions/browser/extension_web_contents_observer.cc
|
| diff --git a/extensions/browser/extension_web_contents_observer.cc b/extensions/browser/extension_web_contents_observer.cc
|
| index 757c1af791e55fd0c0020bd8886818f9219ae437..ac482df0ce32fe2bd4278d31befbcb3e9f800bd6 100644
|
| --- a/extensions/browser/extension_web_contents_observer.cc
|
| +++ b/extensions/browser/extension_web_contents_observer.cc
|
| @@ -12,6 +12,7 @@
|
| #include "content/public/browser/site_instance.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/common/url_constants.h"
|
| +#include "extensions/browser/extension_api_frame_id_map.h"
|
| #include "extensions/browser/extension_prefs.h"
|
| #include "extensions/browser/extension_registry.h"
|
| #include "extensions/browser/extensions_browser_client.h"
|
| @@ -110,12 +111,18 @@ void ExtensionWebContentsObserver::RenderViewCreated(
|
| void ExtensionWebContentsObserver::RenderFrameCreated(
|
| content::RenderFrameHost* render_frame_host) {
|
| InitializeRenderFrame(render_frame_host);
|
| +
|
| + // Optimization: Look up the extension API frame ID to force the mapping to be
|
| + // cached. This minimizes the number of IO->UI->IO thread hops when the ID is
|
| + // looked up again on the IO thread for the webRequest API.
|
| + ExtensionApiFrameIdMap::Get()->CacheFrameId(render_frame_host);
|
| }
|
|
|
| void ExtensionWebContentsObserver::RenderFrameDeleted(
|
| content::RenderFrameHost* render_frame_host) {
|
| ProcessManager::Get(browser_context_)
|
| ->UnregisterRenderFrameHost(render_frame_host);
|
| + ExtensionApiFrameIdMap::Get()->RemoveFrameId(render_frame_host);
|
| }
|
|
|
| void ExtensionWebContentsObserver::DidCommitProvisionalLoadForFrame(
|
|
|