summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authorarv@chromium.org <arv@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-10 00:23:37 +0000
committerarv@chromium.org <arv@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-10 00:23:37 +0000
commit584b8e3f26b6d751c807907ce3c480a698a961a4 (patch)
tree5faf8d719fa1c43b1033862ed5d7bc30bf25b9e8 /chrome/browser/extensions
parente8f6cb0adc4bf051081f6bf4cc2b2054facf38ec (diff)
downloadchromium_src-584b8e3f26b6d751c807907ce3c480a698a961a4.zip
chromium_src-584b8e3f26b6d751c807907ce3c480a698a961a4.tar.gz
chromium_src-584b8e3f26b6d751c807907ce3c480a698a961a4.tar.bz2
Allow extensions to access chrome://favicon/.
An extension needs to add chrome://favicon/ to its permission to able to load favicon images. WebKit changes: https://bugs.webkit.org/show_bug.cgi?id=37228 BUG=37802 TEST=browser_tests.exe --gtest_filter=ExtensionApiTest.* Review URL: http://codereview.chromium.org/1610011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44167 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/extension_function_dispatcher.cc15
-rw-r--r--chrome/browser/extensions/permissions_apitest.cc4
2 files changed, 19 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc
index 7476cb0..8791bb0 100644
--- a/chrome/browser/extensions/extension_function_dispatcher.cc
+++ b/chrome/browser/extensions/extension_function_dispatcher.cc
@@ -6,10 +6,13 @@
#include "base/process_util.h"
#include "base/singleton.h"
+#include "base/ref_counted.h"
#include "base/values.h"
#include "chrome/browser/browser.h"
#include "chrome/browser/browser_list.h"
#include "chrome/browser/browser_window.h"
+#include "chrome/browser/dom_ui/chrome_url_data_manager.h"
+#include "chrome/browser/dom_ui/dom_ui_favicon_source.h"
#include "chrome/browser/extensions/execute_code_in_tab_function.h"
#include "chrome/browser/extensions/extension_accessibility_api.h"
#include "chrome/browser/extensions/extension_bookmark_manager_api.h"
@@ -304,6 +307,18 @@ ExtensionFunctionDispatcher::ExtensionFunctionDispatcher(
bool incognito_enabled =
profile()->GetExtensionsService()->IsIncognitoEnabled(extension);
+ // If the extension has permission to load chrome://favicon/ resources we need
+ // to make sure that the DOMUIFavIconSource is registered with the
+ // ChromeURLDataManager.
+ if (extension->HasHostPermission(GURL(chrome::kChromeUIFavIconURL))) {
+ DOMUIFavIconSource* favicon_source = new DOMUIFavIconSource(profile_);
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableMethod(Singleton<ChromeURLDataManager>::get(),
+ &ChromeURLDataManager::AddDataSource,
+ make_scoped_refptr(favicon_source)));
+ }
+
// Update the extension permissions. Doing this each time we create an EFD
// ensures that new processes are informed of permissions for newly installed
// extensions.
diff --git a/chrome/browser/extensions/permissions_apitest.cc b/chrome/browser/extensions/permissions_apitest.cc
index 55be326..82c4068 100644
--- a/chrome/browser/extensions/permissions_apitest.cc
+++ b/chrome/browser/extensions/permissions_apitest.cc
@@ -37,3 +37,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ExperimentalPermissionsFail) {
ASSERT_TRUE(RunExtensionTest("permissions/experimental_disabled"))
<< message_;
}
+
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, FavIconPermission) {
+ ASSERT_TRUE(RunExtensionTest("permissions/favicon")) << message_;
+}