summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhanxi <hanxi@chromium.org>2015-04-27 12:09:04 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-27 19:09:56 +0000
commit6233f60f246f03cd193bd9ecebbeb314813406d8 (patch)
tree652428b257cc220daf3fc804982efe648769e56e
parent59f6756e6aa719a7d727ecb98456d185d1b57752 (diff)
downloadchromium_src-6233f60f246f03cd193bd9ecebbeb314813406d8.zip
chromium_src-6233f60f246f03cd193bd9ecebbeb314813406d8.tar.gz
chromium_src-6233f60f246f03cd193bd9ecebbeb314813406d8.tar.bz2
Make WebUI webview content script work with incognito.
In WebUIUserScriptLoader, if it is incognito mode, we need to get the OffTheRecordContext and pass it to URLfetchers to load user scripts. Currently, UserScriptLoader can only refer to regular profiles. To fix this, we pass in a flag to show whether it is incognito mode when adding scripts. We are able to choose the correct profile pointer by using this flag. BUG=461052 Review URL: https://codereview.chromium.org/1062963006 Cr-Commit-Position: refs/heads/master@{#327096}
-rw-r--r--chrome/browser/ui/webui/webui_webview_browsertest.cc18
-rw-r--r--extensions/browser/web_ui_user_script_loader.cc16
-rw-r--r--extensions/browser/web_ui_user_script_loader.h1
3 files changed, 30 insertions, 5 deletions
diff --git a/chrome/browser/ui/webui/webui_webview_browsertest.cc b/chrome/browser/ui/webui/webui_webview_browsertest.cc
index 6c3ed9c..a8fcadc 100644
--- a/chrome/browser/ui/webui/webui_webview_browsertest.cc
+++ b/chrome/browser/ui/webui/webui_webview_browsertest.cc
@@ -4,6 +4,8 @@
#include "base/macros.h"
#include "base/path_service.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/base/ui_test_utils.h"
@@ -131,3 +133,19 @@ IN_PROC_BROWSER_TEST_F(WebUIWebViewBrowserTest, AddContentScriptWithCode) {
"testAddContentScriptWithCode",
new base::StringValue(GetTestUrl("empty.html").spec())));
}
+
+#if defined(OS_CHROMEOS)
+// Right now we only have incognito WebUI on CrOS, but this should
+// theoretically work for all platforms.
+IN_PROC_BROWSER_TEST_F(WebUIWebViewBrowserTest, AddContentScriptIncognito) {
+ Browser* incognito_browser = ui_test_utils::OpenURLOffTheRecord(
+ browser()->profile(), GetWebViewEnabledWebUIURL());
+
+ SetWebUIInstance(
+ incognito_browser->tab_strip_model()->GetActiveWebContents()->GetWebUI());
+
+ ASSERT_TRUE(WebUIBrowserTest::RunJavascriptAsyncTest(
+ "testAddContentScript",
+ new base::StringValue(GetTestUrl("empty.html").spec())));
+}
+#endif
diff --git a/extensions/browser/web_ui_user_script_loader.cc b/extensions/browser/web_ui_user_script_loader.cc
index 817834b..73b0c9a 100644
--- a/extensions/browser/web_ui_user_script_loader.cc
+++ b/extensions/browser/web_ui_user_script_loader.cc
@@ -8,6 +8,7 @@
#include "base/strings/string_util.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_process_host.h"
#include "extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.h"
namespace {
@@ -80,10 +81,14 @@ void WebUIUserScriptLoader::LoadScripts(
int render_process_id = iter->second.render_process_id;
int render_view_id = iter->second.render_view_id;
- CreateWebUIURLFetchers(&script.js_scripts(), render_process_id,
- render_view_id);
- CreateWebUIURLFetchers(&script.css_scripts(), render_process_id,
- render_view_id);
+ content::BrowserContext* browser_context =
+ content::RenderProcessHost::FromID(render_process_id)
+ ->GetBrowserContext();
+
+ CreateWebUIURLFetchers(&script.js_scripts(), browser_context,
+ render_process_id, render_view_id);
+ CreateWebUIURLFetchers(&script.css_scripts(), browser_context,
+ render_process_id, render_view_id);
script_render_info_map_.erase(script.id());
}
@@ -99,6 +104,7 @@ void WebUIUserScriptLoader::LoadScripts(
void WebUIUserScriptLoader::CreateWebUIURLFetchers(
extensions::UserScript::FileList* script_files,
+ content::BrowserContext* browser_context,
int render_process_id,
int render_view_id) {
for (extensions::UserScript::File& file : *script_files) {
@@ -107,7 +113,7 @@ void WebUIUserScriptLoader::CreateWebUIURLFetchers(
// loader is destroyed, all the fetchers will be destroyed. Therefore,
// we are sure it is safe to use base::Unretained(this) here.
scoped_ptr<WebUIURLFetcher> fetcher(new WebUIURLFetcher(
- browser_context(), render_process_id, render_view_id, file.url(),
+ browser_context, render_process_id, render_view_id, file.url(),
base::Bind(&WebUIUserScriptLoader::OnSingleWebUIURLFetchComplete,
base::Unretained(this), &file)));
fetchers_.push_back(fetcher.release());
diff --git a/extensions/browser/web_ui_user_script_loader.h b/extensions/browser/web_ui_user_script_loader.h
index 83c10c3..f74ef00 100644
--- a/extensions/browser/web_ui_user_script_loader.h
+++ b/extensions/browser/web_ui_user_script_loader.h
@@ -46,6 +46,7 @@ class WebUIUserScriptLoader : public extensions::UserScriptLoader {
// Creates WebUiURLFetchers for the given |script_files|.
void CreateWebUIURLFetchers(extensions::UserScript::FileList* script_files,
+ content::BrowserContext* browser_context,
int render_process_id,
int render_view_id);