summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorlevin@chromium.org <levin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-11 22:58:20 +0000
committerlevin@chromium.org <levin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-11 22:58:20 +0000
commit2de7e004b9e0cede80a1955d99d01a1e484182d9 (patch)
treeb557dd9dec9b168190d96521c8e5d028f576b0b6 /chrome/renderer
parent13287f25a7562744b3570c2bc6ab9f329f35e239 (diff)
downloadchromium_src-2de7e004b9e0cede80a1955d99d01a1e484182d9.zip
chromium_src-2de7e004b9e0cede80a1955d99d01a1e484182d9.tar.gz
chromium_src-2de7e004b9e0cede80a1955d99d01a1e484182d9.tar.bz2
Wire up InstallSearchProvider to allow setting the default search provider.
Depends on http://codereview.chromium.org/3673002/show. BUG=38475 TEST=Next patch changes the callback mechanism TemplateURLFetcher to make it much more testable and adds tests. (I kept it out of this one to make this more focused.) Review URL: http://codereview.chromium.org/3652003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62204 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/external_extension.cc34
-rw-r--r--chrome/renderer/render_view.cc20
-rw-r--r--chrome/renderer/render_view.h6
3 files changed, 40 insertions, 20 deletions
diff --git a/chrome/renderer/external_extension.cc b/chrome/renderer/external_extension.cc
index f2c3246..a34b6a4 100644
--- a/chrome/renderer/external_extension.cc
+++ b/chrome/renderer/external_extension.cc
@@ -16,18 +16,23 @@ using WebKit::WebView;
namespace extensions_v8 {
-#define SEARCH_PROVIDER_API_V1 \
- "var external;" \
- "if (!external)" \
- " external = {};" \
- "external.AddSearchProvider = function(name) {" \
- " native function NativeAddSearchProvider();" \
- " NativeAddSearchProvider(name);" \
- "};"
-
-static const char* const kSearchProviderApiV1 = SEARCH_PROVIDER_API_V1;
+static const char* const kSearchProviderApiV1 =
+ "var external;"
+ "if (!external)"
+ " external = {};"
+ "external.AddSearchProvider = function(name) {"
+ " native function NativeAddSearchProvider();"
+ " NativeAddSearchProvider(name);"
+ "};";
+
static const char* const kSearchProviderApiV2 =
- SEARCH_PROVIDER_API_V1
+ "var external;"
+ "if (!external)"
+ " external = {};"
+ "external.AddSearchProvider = function(name, default_provider) {"
+ " native function NativeAddSearchProvider();"
+ " NativeAddSearchProvider(name, default_provider);"
+ "};"
"external.IsSearchProviderInstalled = function(name) {"
" native function NativeIsSearchProviderInstalled();"
" return NativeIsSearchProviderInstalled(name);"
@@ -107,10 +112,15 @@ v8::Handle<v8::Value> ExternalExtensionWrapper::AddSearchProvider(
std::string name = std::string(*v8::String::Utf8Value(args[0]));
if (!name.length()) return v8::Undefined();
+ ViewHostMsg_PageHasOSDD_Type provider_type =
+ ((args.Length() < 2) || !args[1]->BooleanValue()) ?
+ ViewHostMsg_PageHasOSDD_Type::Explicit() :
+ ViewHostMsg_PageHasOSDD_Type::ExplicitDefault();
+
RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
- render_view->AddSearchProvider(name);
+ render_view->AddSearchProvider(name, provider_type);
return v8::Undefined();
}
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 0d9c1bf..2673947 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -1616,10 +1616,12 @@ bool RenderView::SendAndRunNestedMessageLoop(IPC::SyncMessage* message) {
return Send(message);
}
-void RenderView::AddGURLSearchProvider(const GURL& osd_url, bool autodetected) {
+void RenderView::AddGURLSearchProvider(
+ const GURL& osd_url,
+ const ViewHostMsg_PageHasOSDD_Type& provider_type) {
if (!osd_url.is_empty())
Send(new ViewHostMsg_PageHasOSDD(routing_id_, page_id_, osd_url,
- autodetected));
+ provider_type));
}
void RenderView::OnAutoFillSuggestionsReturned(
@@ -1647,9 +1649,15 @@ uint32 RenderView::GetCPBrowsingContext() {
return context;
}
-void RenderView::AddSearchProvider(const std::string& url) {
- AddGURLSearchProvider(GURL(url),
- false); // not autodetected
+void RenderView::AddSearchProvider(
+ const std::string& url,
+ const ViewHostMsg_PageHasOSDD_Type& provider_type) {
+ if (provider_type.type ==
+ ViewHostMsg_PageHasOSDD_Type::EXPLICIT_DEFAULT_PROVIDER &&
+ !webview()->mainFrame()->isProcessingUserGesture())
+ return;
+
+ AddGURLSearchProvider(GURL(url), provider_type);
}
ViewHostMsg_GetSearchProviderInstallState_Params
@@ -1839,7 +1847,7 @@ void RenderView::didStopLoading() {
Send(new ViewHostMsg_UpdateFavIconURL(routing_id_, page_id_, favicon_url));
AddGURLSearchProvider(webview()->mainFrame()->openSearchDescriptionURL(),
- true); // autodetected
+ ViewHostMsg_PageHasOSDD_Type::Autodetected());
Send(new ViewHostMsg_DidStopLoading(routing_id_));
diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h
index a7de84b..3124c98 100644
--- a/chrome/renderer/render_view.h
+++ b/chrome/renderer/render_view.h
@@ -221,7 +221,8 @@ class RenderView : public RenderWidget,
// Called from JavaScript window.external.AddSearchProvider() to add a
// keyword for a provider described in the given OpenSearch document.
- void AddSearchProvider(const std::string& url);
+ void AddSearchProvider(const std::string& url,
+ const ViewHostMsg_PageHasOSDD_Type& provider_type);
// Returns the install state for the given search provider url.
ViewHostMsg_GetSearchProviderInstallState_Params
@@ -724,7 +725,8 @@ class RenderView : public RenderWidget,
// Adds search provider from the given OpenSearch description URL as a
// keyword search.
- void AddGURLSearchProvider(const GURL& osd_url, bool autodetected);
+ void AddGURLSearchProvider(const GURL& osd_url,
+ const ViewHostMsg_PageHasOSDD_Type& provider_type);
// Called in a posted task by textFieldDidChange() to work-around a WebKit bug
// http://bugs.webkit.org/show_bug.cgi?id=16976