mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	chrome: Add CEF-specific WebUI handling (see issue #2969)
To avoid conflicting IDs between Alloy (which uses cef.pak) and Chrome (which uses chrome_100_percent.pak) the cef/LICENSE.txt file is now included in both cef/libcef/resources/cef_resources.grd and chrome/app/theme/chrome_unscaled_resources.grd with different ID values. The cef.pak file currently contains both CEF-specific resources and Chrome resources that are already included in the default *.pak files distributed with Chrome. In the future we should remove this duplication and just distribute the same *.pak files as Chrome for the majority of resources.
This commit is contained in:
		| @@ -5,6 +5,7 @@ | |||||||
| #include "libcef/browser/chrome/chrome_browser_main_extra_parts_cef.h" | #include "libcef/browser/chrome/chrome_browser_main_extra_parts_cef.h" | ||||||
|  |  | ||||||
| #include "libcef/browser/context.h" | #include "libcef/browser/context.h" | ||||||
|  | #include "libcef/browser/net/chrome_scheme_handler.h" | ||||||
|  |  | ||||||
| #include "base/task/post_task.h" | #include "base/task/post_task.h" | ||||||
|  |  | ||||||
| @@ -31,4 +32,6 @@ void ChromeBrowserMainExtraPartsCef::PreMainMessageLoopRun() { | |||||||
|   user_blocking_task_runner_ = base::CreateSingleThreadTaskRunner( |   user_blocking_task_runner_ = base::CreateSingleThreadTaskRunner( | ||||||
|       {base::ThreadPool(), base::TaskPriority::USER_BLOCKING, |       {base::ThreadPool(), base::TaskPriority::USER_BLOCKING, | ||||||
|        base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::MayBlock()}); |        base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::MayBlock()}); | ||||||
|  |  | ||||||
|  |   scheme::RegisterWebUIControllerFactory(); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -8,6 +8,7 @@ | |||||||
| #include "libcef/browser/browser_info_manager.h" | #include "libcef/browser/browser_info_manager.h" | ||||||
| #include "libcef/browser/browser_message_filter.h" | #include "libcef/browser/browser_message_filter.h" | ||||||
| #include "libcef/browser/chrome/chrome_browser_main_extra_parts_cef.h" | #include "libcef/browser/chrome/chrome_browser_main_extra_parts_cef.h" | ||||||
|  | #include "libcef/browser/net/chrome_scheme_handler.h" | ||||||
| #include "libcef/browser/net/throttle_handler.h" | #include "libcef/browser/net/throttle_handler.h" | ||||||
| #include "libcef/browser/net_service/cookie_manager_impl.h" | #include "libcef/browser/net_service/cookie_manager_impl.h" | ||||||
| #include "libcef/browser/net_service/login_delegate.h" | #include "libcef/browser/net_service/login_delegate.h" | ||||||
| @@ -283,6 +284,17 @@ ChromeContentBrowserClientCef::CreateLoginDelegate( | |||||||
|       response_headers, first_auth_attempt, std::move(auth_required_callback)); |       response_headers, first_auth_attempt, std::move(auth_required_callback)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void ChromeContentBrowserClientCef::BrowserURLHandlerCreated( | ||||||
|  |     content::BrowserURLHandler* handler) { | ||||||
|  |   scheme::BrowserURLHandlerCreated(handler); | ||||||
|  |   ChromeContentBrowserClient::BrowserURLHandlerCreated(handler); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ChromeContentBrowserClientCef::IsWebUIAllowedToMakeNetworkRequests( | ||||||
|  |     const url::Origin& origin) { | ||||||
|  |   return scheme::IsWebUIAllowedToMakeNetworkRequests(origin); | ||||||
|  | } | ||||||
|  |  | ||||||
| CefRefPtr<CefRequestContextImpl> | CefRefPtr<CefRequestContextImpl> | ||||||
| ChromeContentBrowserClientCef::request_context() const { | ChromeContentBrowserClientCef::request_context() const { | ||||||
|   return browser_main_parts_->request_context(); |   return browser_main_parts_->request_context(); | ||||||
|   | |||||||
| @@ -91,6 +91,8 @@ class ChromeContentBrowserClientCef : public ChromeContentBrowserClient { | |||||||
|       scoped_refptr<net::HttpResponseHeaders> response_headers, |       scoped_refptr<net::HttpResponseHeaders> response_headers, | ||||||
|       bool first_auth_attempt, |       bool first_auth_attempt, | ||||||
|       LoginAuthRequiredCallback auth_required_callback) override; |       LoginAuthRequiredCallback auth_required_callback) override; | ||||||
|  |   void BrowserURLHandlerCreated(content::BrowserURLHandler* handler) override; | ||||||
|  |   bool IsWebUIAllowedToMakeNetworkRequests(const url::Origin& origin) override; | ||||||
|  |  | ||||||
|   CefRefPtr<CefRequestContextImpl> request_context() const; |   CefRefPtr<CefRequestContextImpl> request_context() const; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ | |||||||
| #include "libcef/browser/net/internal_scheme_handler.h" | #include "libcef/browser/net/internal_scheme_handler.h" | ||||||
| #include "libcef/browser/thread_util.h" | #include "libcef/browser/thread_util.h" | ||||||
| #include "libcef/common/app_manager.h" | #include "libcef/common/app_manager.h" | ||||||
|  | #include "libcef/features/runtime.h" | ||||||
|  |  | ||||||
| #include "base/command_line.h" | #include "base/command_line.h" | ||||||
| #include "base/files/file_util.h" | #include "base/files/file_util.h" | ||||||
| @@ -34,6 +35,7 @@ | |||||||
| #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" | #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" | ||||||
| #include "chrome/browser/ui/webui/theme_source.h" | #include "chrome/browser/ui/webui/theme_source.h" | ||||||
| #include "chrome/common/url_constants.h" | #include "chrome/common/url_constants.h" | ||||||
|  | #include "chrome/grit/chrome_unscaled_resources.h" | ||||||
| #include "content/browser/renderer_host/debug_urls.h" | #include "content/browser/renderer_host/debug_urls.h" | ||||||
| #include "content/browser/webui/content_web_ui_controller_factory.h" | #include "content/browser/webui/content_web_ui_controller_factory.h" | ||||||
| #include "content/public/browser/browser_url_handler.h" | #include "content/public/browser/browser_url_handler.h" | ||||||
| @@ -164,6 +166,10 @@ bool IsUnlistedHost(const std::string& host) { | |||||||
|  |  | ||||||
| // Returns true if a host is WebUI and should be allowed to load. | // Returns true if a host is WebUI and should be allowed to load. | ||||||
| bool IsAllowedWebUIHost(const std::string& host) { | bool IsAllowedWebUIHost(const std::string& host) { | ||||||
|  |   // Chrome runtime allows all WebUI hosts. | ||||||
|  |   if (cef::IsChromeRuntimeEnabled()) | ||||||
|  |     return true; | ||||||
|  |  | ||||||
|   // Explicitly whitelisted WebUI hosts. |   // Explicitly whitelisted WebUI hosts. | ||||||
|   for (size_t i = 0; |   for (size_t i = 0; | ||||||
|        i < sizeof(kAllowedWebUIHosts) / sizeof(kAllowedWebUIHosts[0]); ++i) { |        i < sizeof(kAllowedWebUIHosts) / sizeof(kAllowedWebUIHosts[0]); ++i) { | ||||||
| @@ -285,6 +291,18 @@ class TemplateParser { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| bool OnExtensionsSupportUI(std::string* mime_type, std::string* output) { | bool OnExtensionsSupportUI(std::string* mime_type, std::string* output) { | ||||||
|  |   *mime_type = "text/html"; | ||||||
|  |  | ||||||
|  |   if (cef::IsChromeRuntimeEnabled()) { | ||||||
|  |     // Redirect to the Chrome documentation. | ||||||
|  |     *output = | ||||||
|  |         "<html><head>\n" | ||||||
|  |         "<meta http-equiv=\"refresh\" " | ||||||
|  |         "content=\"0;URL='https://developer.chrome.com/docs/extensions/'\"/>\n" | ||||||
|  |         "</head></html>\n"; | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   static const char kDevURL[] = "https://developer.chrome.com/extensions/"; |   static const char kDevURL[] = "https://developer.chrome.com/extensions/"; | ||||||
|  |  | ||||||
|   std::string html = |   std::string html = | ||||||
| @@ -331,16 +349,22 @@ bool OnExtensionsSupportUI(std::string* mime_type, std::string* output) { | |||||||
|  |  | ||||||
|   html += "</ul>\n</body>\n</html>"; |   html += "</ul>\n</body>\n</html>"; | ||||||
|  |  | ||||||
|   *mime_type = "text/html"; |  | ||||||
|   *output = html; |   *output = html; | ||||||
|  |  | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool OnLicenseUI(std::string* mime_type, std::string* output) { | bool OnLicenseUI(std::string* mime_type, std::string* output) { | ||||||
|  |   // TODO(chrome): Currently, CEF-specific resources for the Alloy runtime come | ||||||
|  |   // from cef/libcef/resources/cef_resources.grd via cef.pak and CEF-specific | ||||||
|  |   // resources for the Chrome runtime come from | ||||||
|  |   // chrome/app/theme/chrome_unscaled_resources.grd via chrome_100_percent.pak. | ||||||
|  |   // It would be better to have a single pak file (and single ID value) for | ||||||
|  |   // CEF-specific resources and share the same *.pak files as Chrome for the | ||||||
|  |   // other resources. | ||||||
|   std::string piece = |   std::string piece = | ||||||
|       ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( |       ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( | ||||||
|           IDR_CEF_LICENSE_TXT); |           cef::IsChromeRuntimeEnabled() ? IDR_CHROME_CEF_LICENSE_TXT | ||||||
|  |                                         : IDR_CEF_LICENSE_TXT); | ||||||
|   if (piece.empty()) { |   if (piece.empty()) { | ||||||
|     NOTREACHED() << "Failed to load license txt resource."; |     NOTREACHED() << "Failed to load license txt resource."; | ||||||
|     return false; |     return false; | ||||||
|   | |||||||
| @@ -77,6 +77,18 @@ index db85b6b2fcf5..bcf6867e8f4e 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  #endif  // defined(OS_LINUX) || defined(OS_CHROMEOS) |  #endif  // defined(OS_LINUX) || defined(OS_CHROMEOS) | ||||||
|  | diff --git chrome/app/theme/chrome_unscaled_resources.grd chrome/app/theme/chrome_unscaled_resources.grd | ||||||
|  | index b4e4545e3520..29335f1614e2 100644 | ||||||
|  | --- chrome/app/theme/chrome_unscaled_resources.grd | ||||||
|  | +++ chrome/app/theme/chrome_unscaled_resources.grd | ||||||
|  | @@ -62,6 +62,7 @@ | ||||||
|  |          </if> | ||||||
|  |        </if> | ||||||
|  |        <if expr="not _google_chrome"> | ||||||
|  | +        <include name="IDR_CHROME_CEF_LICENSE_TXT" file="../../../cef/LICENSE.txt" type="BINDATA" /> | ||||||
|  |          <include name="IDR_PRODUCT_LOGO_64" file="chromium/product_logo_64.png" type="BINDATA" /> | ||||||
|  |          <include name="IDR_PRODUCT_LOGO_128" file="chromium/product_logo_128.png" type="BINDATA" /> | ||||||
|  |          <include name="IDR_PRODUCT_LOGO_256" file="chromium/product_logo_256.png" type="BINDATA" /> | ||||||
| diff --git chrome/browser/chrome_browser_main.cc chrome/browser/chrome_browser_main.cc | diff --git chrome/browser/chrome_browser_main.cc chrome/browser/chrome_browser_main.cc | ||||||
| index fee4d5f1a8ca..2e4fb506d851 100644 | index fee4d5f1a8ca..2e4fb506d851 100644 | ||||||
| --- chrome/browser/chrome_browser_main.cc | --- chrome/browser/chrome_browser_main.cc | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user