// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "libcef/browser/extensions/extension_web_contents_observer.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/common/url_constants.h" DEFINE_WEB_CONTENTS_USER_DATA_KEY(extensions::CefExtensionWebContentsObserver); namespace extensions { CefExtensionWebContentsObserver::CefExtensionWebContentsObserver( content::WebContents* web_contents) : ExtensionWebContentsObserver(web_contents), script_executor_( new ScriptExecutor(web_contents, &script_execution_observers_)) {} CefExtensionWebContentsObserver::~CefExtensionWebContentsObserver() {} // static void CefExtensionWebContentsObserver::CreateForWebContents( content::WebContents* web_contents) { content::WebContentsUserData< CefExtensionWebContentsObserver>::CreateForWebContents(web_contents); // Initialize this instance if necessary. FromWebContents(web_contents)->Initialize(); } void CefExtensionWebContentsObserver::RenderFrameCreated( content::RenderFrameHost* render_frame_host) { ExtensionWebContentsObserver::RenderFrameCreated(render_frame_host); const Extension* extension = GetExtensionFromFrame(render_frame_host, false); if (!extension) return; int process_id = render_frame_host->GetProcess()->GetID(); auto policy = content::ChildProcessSecurityPolicy::GetInstance(); // Components of chrome that are implemented as extensions or platform apps // are allowed to use chrome://resources/ URLs. if ((extension->is_extension() || extension->is_platform_app()) && Manifest::IsComponentLocation(extension->location())) { policy->GrantOrigin( process_id, url::Origin::Create(GURL(content::kChromeUIResourcesURL))); } } } // namespace extensions