| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/chrome_web_ui_factory.h" | 5 #include "chrome/browser/ui/webui/chrome_web_ui_factory.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "chrome/browser/about_flags.h" | 8 #include "chrome/browser/about_flags.h" |
| 9 #include "chrome/browser/extensions/extension_service.h" | 9 #include "chrome/browser/extensions/extension_service.h" |
| 10 #include "chrome/browser/extensions/extension_web_ui.h" | 10 #include "chrome/browser/extensions/extension_web_ui.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 | 78 |
| 79 #if defined(OS_POSIX) && !defined(OS_MACOSX) | 79 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
| 80 #include "chrome/browser/ui/webui/certificate_viewer_ui.h" | 80 #include "chrome/browser/ui/webui/certificate_viewer_ui.h" |
| 81 #endif | 81 #endif |
| 82 | 82 |
| 83 #if !defined(USE_AURA) | 83 #if !defined(USE_AURA) |
| 84 #include "chrome/browser/ui/webui/input_window_dialog_ui.h" | 84 #include "chrome/browser/ui/webui/input_window_dialog_ui.h" |
| 85 #endif | 85 #endif |
| 86 | 86 |
| 87 using content::WebContents; | 87 using content::WebContents; |
| 88 using content::WebUIController; |
| 88 | 89 |
| 89 namespace { | 90 namespace { |
| 90 | 91 |
| 91 // A function for creating a new WebUI. The caller owns the return value, which | 92 // A function for creating a new WebUI. The caller owns the return value, which |
| 92 // may be NULL (for example, if the URL refers to an non-existent extension). | 93 // may be NULL (for example, if the URL refers to an non-existent extension). |
| 93 typedef WebUI* (*WebUIFactoryFunction)(WebContents* web_contents, | 94 typedef WebUIController* (*WebUIFactoryFunction)(WebUI* web_ui, |
| 94 const GURL& url); | 95 const GURL& url); |
| 95 | 96 |
| 96 // Template for defining WebUIFactoryFunction. | 97 // Template for defining WebUIFactoryFunction. |
| 97 template<class T> | 98 template<class T> |
| 98 WebUI* NewWebUI(WebContents* contents, const GURL& url) { | 99 WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { |
| 99 return new T(contents); | 100 return new T(web_ui); |
| 100 } | 101 } |
| 101 | 102 |
| 102 // Special case for extensions. | 103 // Special case for extensions. |
| 103 template<> | 104 template<> |
| 104 WebUI* NewWebUI<ExtensionWebUI>(WebContents* contents, const GURL& url) { | 105 WebUIController* NewWebUI<ExtensionWebUI>(WebUI* web_ui, const GURL& url) { |
| 105 return new ExtensionWebUI(contents, url); | 106 return new ExtensionWebUI(web_ui, url); |
| 106 } | 107 } |
| 107 | 108 |
| 108 // Special case for older about: handlers. | 109 // Special case for older about: handlers. |
| 109 template<> | 110 template<> |
| 110 WebUI* NewWebUI<AboutUI>(WebContents* contents, const GURL& url) { | 111 WebUIController* NewWebUI<AboutUI>(WebUI* web_ui, const GURL& url) { |
| 111 return new AboutUI(contents, url.host()); | 112 return new AboutUI(web_ui, url.host()); |
| 112 } | 113 } |
| 113 | 114 |
| 114 // Only create ExtensionWebUI for URLs that are allowed extension bindings, | 115 // Only create ExtensionWebUI for URLs that are allowed extension bindings, |
| 115 // hosted by actual tabs. If tab_contents has no wrapper, it likely refers | 116 // hosted by actual tabs. If tab_contents has no wrapper, it likely refers |
| 116 // to another container type, like an extension background page. If there is | 117 // to another container type, like an extension background page. If there is |
| 117 // no tab_contents (it's not accessible when calling GetWebUIType and related | 118 // no WebUI (it's not accessible when calling GetWebUIType and related |
| 118 // functions) then we conservatively assume that we need a WebUI. | 119 // functions) then we conservatively assume that we need a WebUI. |
| 119 bool NeedsExtensionWebUI(WebContents* web_contents, | 120 bool NeedsExtensionWebUI(WebUI* web_ui, |
| 120 Profile* profile, | 121 Profile* profile, |
| 121 const GURL& url) { | 122 const GURL& url) { |
| 122 ExtensionService* service = profile ? profile->GetExtensionService() : NULL; | 123 ExtensionService* service = profile ? profile->GetExtensionService() : NULL; |
| 123 return service && service->ExtensionBindingsAllowed(url) && | 124 return service && service->ExtensionBindingsAllowed(url) && |
| 124 (!web_contents || | 125 (!web_ui || |
| 125 TabContentsWrapper::GetCurrentWrapperForContents(web_contents)); | 126 TabContentsWrapper::GetCurrentWrapperForContents( |
| 127 web_ui->GetWebContents())); |
| 126 } | 128 } |
| 127 | 129 |
| 128 // Returns a function that can be used to create the right type of WebUI for a | 130 // Returns a function that can be used to create the right type of WebUI for a |
| 129 // tab, based on its URL. Returns NULL if the URL doesn't have WebUI associated | 131 // tab, based on its URL. Returns NULL if the URL doesn't have WebUI associated |
| 130 // with it. | 132 // with it. |
| 131 WebUIFactoryFunction GetWebUIFactoryFunction(WebContents* web_contents, | 133 WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, |
| 132 Profile* profile, | 134 Profile* profile, |
| 133 const GURL& url) { | 135 const GURL& url) { |
| 134 if (NeedsExtensionWebUI(web_contents, profile, url)) | 136 if (NeedsExtensionWebUI(web_ui, profile, url)) |
| 135 return &NewWebUI<ExtensionWebUI>; | 137 return &NewWebUI<ExtensionWebUI>; |
| 136 | 138 |
| 137 // This will get called a lot to check all URLs, so do a quick check of other | 139 // This will get called a lot to check all URLs, so do a quick check of other |
| 138 // schemes to filter out most URLs. | 140 // schemes to filter out most URLs. |
| 139 if (!url.SchemeIs(chrome::kChromeDevToolsScheme) && | 141 if (!url.SchemeIs(chrome::kChromeDevToolsScheme) && |
| 140 !url.SchemeIs(chrome::kChromeInternalScheme) && | 142 !url.SchemeIs(chrome::kChromeInternalScheme) && |
| 141 !url.SchemeIs(chrome::kChromeUIScheme)) { | 143 !url.SchemeIs(chrome::kChromeUIScheme)) { |
| 142 return NULL; | 144 return NULL; |
| 143 } | 145 } |
| 144 | 146 |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 // It's possible to load about:blank in a Web UI renderer. | 390 // It's possible to load about:blank in a Web UI renderer. |
| 389 // See http://crbug.com/42547 | 391 // See http://crbug.com/42547 |
| 390 url.spec() == chrome::kAboutBlankURL || | 392 url.spec() == chrome::kAboutBlankURL || |
| 391 // Chrome URLs crash, kill, hang, and shorthang are allowed. | 393 // Chrome URLs crash, kill, hang, and shorthang are allowed. |
| 392 url == GURL(chrome::kChromeUICrashURL) || | 394 url == GURL(chrome::kChromeUICrashURL) || |
| 393 url == GURL(chrome::kChromeUIKillURL) || | 395 url == GURL(chrome::kChromeUIKillURL) || |
| 394 url == GURL(chrome::kChromeUIHangURL) || | 396 url == GURL(chrome::kChromeUIHangURL) || |
| 395 url == GURL(chrome::kChromeUIShorthangURL); | 397 url == GURL(chrome::kChromeUIShorthangURL); |
| 396 } | 398 } |
| 397 | 399 |
| 398 WebUI* ChromeWebUIFactory::CreateWebUIForURL( | 400 WebUIController* ChromeWebUIFactory::CreateWebUIForURL( |
| 399 content::WebContents* web_contents, | 401 WebUI* web_ui, |
| 400 const GURL& url) const { | 402 const GURL& url) const { |
| 401 Profile* profile = | 403 Profile* profile = Profile::FromBrowserContext( |
| 402 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 404 web_ui->GetWebContents()->GetBrowserContext()); |
| 403 WebUIFactoryFunction function = GetWebUIFactoryFunction(web_contents, | 405 WebUIFactoryFunction function = GetWebUIFactoryFunction(web_ui, |
| 404 profile, url); | 406 profile, url); |
| 405 if (!function) | 407 if (!function) |
| 406 return NULL; | 408 return NULL; |
| 407 return (*function)(web_contents, url); | 409 |
| 410 return (*function)(web_ui, url); |
| 408 } | 411 } |
| 409 | 412 |
| 410 void ChromeWebUIFactory::GetFaviconForURL( | 413 void ChromeWebUIFactory::GetFaviconForURL( |
| 411 Profile* profile, | 414 Profile* profile, |
| 412 FaviconService::GetFaviconRequest* request, | 415 FaviconService::GetFaviconRequest* request, |
| 413 const GURL& page_url) const { | 416 const GURL& page_url) const { |
| 414 // All extensions but the bookmark manager get their favicon from the icons | 417 // All extensions but the bookmark manager get their favicon from the icons |
| 415 // part of the manifest. | 418 // part of the manifest. |
| 416 if (page_url.SchemeIs(chrome::kExtensionScheme) && | 419 if (page_url.SchemeIs(chrome::kExtensionScheme) && |
| 417 page_url.host() != extension_misc::kBookmarkManagerId) { | 420 page_url.host() != extension_misc::kBookmarkManagerId) { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 return OptionsUI::GetFaviconResourceBytes(); | 485 return OptionsUI::GetFaviconResourceBytes(); |
| 483 | 486 |
| 484 if (page_url.host() == chrome::kChromeUISettingsFrameHost) | 487 if (page_url.host() == chrome::kChromeUISettingsFrameHost) |
| 485 return options2::OptionsUI::GetFaviconResourceBytes(); | 488 return options2::OptionsUI::GetFaviconResourceBytes(); |
| 486 | 489 |
| 487 if (page_url.host() == chrome::kChromeUIPluginsHost) | 490 if (page_url.host() == chrome::kChromeUIPluginsHost) |
| 488 return PluginsUI::GetFaviconResourceBytes(); | 491 return PluginsUI::GetFaviconResourceBytes(); |
| 489 | 492 |
| 490 return NULL; | 493 return NULL; |
| 491 } | 494 } |
| OLD | NEW |