diff options
author | levin@chromium.org <levin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-11 22:58:20 +0000 |
---|---|---|
committer | levin@chromium.org <levin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-11 22:58:20 +0000 |
commit | 2de7e004b9e0cede80a1955d99d01a1e484182d9 (patch) | |
tree | b557dd9dec9b168190d96521c8e5d028f576b0b6 /chrome/renderer | |
parent | 13287f25a7562744b3570c2bc6ab9f329f35e239 (diff) | |
download | chromium_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.cc | 34 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 20 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 6 |
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 |