diff options
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.cc | 5 | ||||
-rw-r--r-- | chrome/renderer/search_extension.cc | 94 | ||||
-rw-r--r-- | chrome/renderer/search_extension.h | 23 | ||||
-rw-r--r-- | chrome/renderer/searchbox.cc | 60 | ||||
-rw-r--r-- | chrome/renderer/searchbox.h | 35 | ||||
-rw-r--r-- | chrome/renderer/searchbox_extension.cc | 211 | ||||
-rw-r--r-- | chrome/renderer/searchbox_extension.h | 2 |
7 files changed, 111 insertions, 319 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index 6643f24..fff4b27 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc @@ -59,7 +59,6 @@ #include "chrome/renderer/print_web_view_helper.h" #include "chrome/renderer/safe_browsing/malware_dom_details.h" #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" -#include "chrome/renderer/search_extension.h" #include "chrome/renderer/searchbox.h" #include "chrome/renderer/searchbox_extension.h" #include "chrome/renderer/spellchecker/spellcheck.h" @@ -178,10 +177,6 @@ void ChromeContentRendererClient::RenderThreadStarted() { thread->RegisterExtension(extensions_v8::ExternalExtension::Get()); thread->RegisterExtension(extensions_v8::LoadTimesExtension::Get()); thread->RegisterExtension(extensions_v8::SearchBoxExtension::Get()); - v8::Extension* search_extension = extensions_v8::SearchExtension::Get(); - // search_extension is null if not enabled. - if (search_extension) - thread->RegisterExtension(search_extension); CommandLine* command_line = CommandLine::ForCurrentProcess(); if (command_line->HasSwitch(switches::kEnableBenchmarking)) diff --git a/chrome/renderer/search_extension.cc b/chrome/renderer/search_extension.cc deleted file mode 100644 index 01e3a7d..0000000 --- a/chrome/renderer/search_extension.cc +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/renderer/search_extension.h" - -#include <string> -#include <vector> - -#include "base/command_line.h" -#include "chrome/renderer/searchbox.h" -#include "content/public/renderer/render_view.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" -#include "v8/include/v8.h" - -using WebKit::WebFrame; -using WebKit::WebView; - -namespace extensions_v8 { - -const char* const kSearchExtensionName = "v8/InstantSearch"; - -class SearchExtensionWrapper : public v8::Extension { - public: - SearchExtensionWrapper(); - - // Allows v8's javascript code to call the native functions defined - // in this class for window.chrome. - virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( - v8::Handle<v8::String> name); - - // Helper function to find the RenderView. May return NULL. - static content::RenderView* GetRenderView(); - - // Implementation of window.chrome.setSuggestResult. - static v8::Handle<v8::Value> SetSuggestResult(const v8::Arguments& args); - - private: - DISALLOW_COPY_AND_ASSIGN(SearchExtensionWrapper); -}; - -SearchExtensionWrapper::SearchExtensionWrapper() - : v8::Extension(kSearchExtensionName, - "var chrome;" - "if (!chrome)" - " chrome = {};" - "chrome.setSuggestResult = function(text) {" - " native function NativeSetSuggestResult();" - " NativeSetSuggestResult(text);" - "};") { -} - -v8::Handle<v8::FunctionTemplate> SearchExtensionWrapper::GetNativeFunction( - v8::Handle<v8::String> name) { - if (name->Equals(v8::String::New("NativeSetSuggestResult"))) { - return v8::FunctionTemplate::New(SetSuggestResult); - } - - return v8::Handle<v8::FunctionTemplate>(); -} - -// static -content::RenderView* SearchExtensionWrapper::GetRenderView() { - WebFrame* webframe = WebFrame::frameForEnteredContext(); - DCHECK(webframe) << "There should be an active frame since we just got " - "a native function called."; - if (!webframe) return NULL; - - WebView* webview = webframe->view(); - if (!webview) return NULL; // can happen during closing - - return content::RenderView::FromWebView(webview); -} - -// static -v8::Handle<v8::Value> SearchExtensionWrapper::SetSuggestResult( - const v8::Arguments& args) { - if (!args.Length() || !args[0]->IsString()) return v8::Undefined(); - - content::RenderView* render_view = GetRenderView(); - if (!render_view) return v8::Undefined(); - - std::vector<std::string> suggestions; - suggestions.push_back(std::string(*v8::String::Utf8Value(args[0]))); - SearchBox::Get(render_view)->SetSuggestions(suggestions, - INSTANT_COMPLETE_NOW); - return v8::Undefined(); -} - -v8::Extension* SearchExtension::Get() { - return new SearchExtensionWrapper(); -} - -} // namespace extensions_v8 diff --git a/chrome/renderer/search_extension.h b/chrome/renderer/search_extension.h deleted file mode 100644 index 99c6f1f..0000000 --- a/chrome/renderer/search_extension.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_RENDERER_SEARCH_EXTENSION_H_ -#define CHROME_RENDERER_SEARCH_EXTENSION_H_ - -namespace v8 { -class Extension; -} - -namespace extensions_v8 { - -class SearchExtension { - public: - // Returns the v8::Extension object handling search bindings. Returns null if - // match-preview is not enabled. Caller takes ownership of returned object. - static v8::Extension* Get(); -}; - -} // namespace extensions_v8 - -#endif // CHROME_RENDERER_SEARCH_EXTENSION_H_ diff --git a/chrome/renderer/searchbox.cc b/chrome/renderer/searchbox.cc index fc9ee55..a662713 100644 --- a/chrome/renderer/searchbox.cc +++ b/chrome/renderer/searchbox.cc @@ -9,8 +9,6 @@ #include "content/public/renderer/render_view.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" -using WebKit::WebView; - SearchBox::SearchBox(content::RenderView* render_view) : content::RenderViewObserver(render_view), content::RenderViewObserverTracker<SearchBox>(render_view), @@ -22,7 +20,7 @@ SearchBox::SearchBox(content::RenderView* render_view) SearchBox::~SearchBox() { } -void SearchBox::SetSuggestions(const std::vector<std::string>& suggestions, +void SearchBox::SetSuggestions(const std::vector<string16>& suggestions, InstantCompleteBehavior behavior) { // Explicitly allow empty vector to be sent to the browser. render_view()->Send(new ChromeViewHostMsg_SetSuggestions( @@ -34,10 +32,10 @@ gfx::Rect SearchBox::GetRect() { // Need to adjust for scale. if (rect_.IsEmpty()) return rect_; - WebView* web_view = render_view()->GetWebView(); + WebKit::WebView* web_view = render_view()->GetWebView(); if (!web_view) return rect_; - double zoom = WebView::zoomLevelToZoomFactor(web_view->zoomLevel()); + double zoom = WebKit::WebView::zoomLevelToZoomFactor(web_view->zoomLevel()); if (zoom == 0) return rect_; return gfx::Rect(static_cast<int>(static_cast<float>(rect_.x()) / zoom), @@ -62,21 +60,22 @@ bool SearchBox::OnMessageReceived(const IPC::Message& message) { void SearchBox::OnChange(const string16& value, bool verbatim, - int selection_start, - int selection_end) { + size_t selection_start, + size_t selection_end) { value_ = value; verbatim_ = verbatim; selection_start_ = selection_start; selection_end_ = selection_end; - if (!render_view()->GetWebView() || !render_view()->GetWebView()->mainFrame()) - return; - extensions_v8::SearchBoxExtension::DispatchChange( - render_view()->GetWebView()->mainFrame()); + if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { + extensions_v8::SearchBoxExtension::DispatchChange( + render_view()->GetWebView()->mainFrame()); + } } -void SearchBox::OnSubmit(const string16& value, bool verbatim) { +void SearchBox::OnSubmit(const string16& value) { value_ = value; - verbatim_ = verbatim; + verbatim_ = true; + selection_start_ = selection_end_ = value_.size(); if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { extensions_v8::SearchBoxExtension::DispatchSubmit( render_view()->GetWebView()->mainFrame()); @@ -84,8 +83,10 @@ void SearchBox::OnSubmit(const string16& value, bool verbatim) { Reset(); } -void SearchBox::OnCancel() { - verbatim_ = false; +void SearchBox::OnCancel(const string16& value) { + value_ = value; + verbatim_ = true; + selection_start_ = selection_end_ = value_.size(); if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { extensions_v8::SearchBoxExtension::DispatchCancel( render_view()->GetWebView()->mainFrame()); @@ -95,29 +96,24 @@ void SearchBox::OnCancel() { void SearchBox::OnResize(const gfx::Rect& bounds) { rect_ = bounds; - if (!render_view()->GetWebView() || !render_view()->GetWebView()->mainFrame()) - return; - extensions_v8::SearchBoxExtension::DispatchResize( - render_view()->GetWebView()->mainFrame()); + if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { + extensions_v8::SearchBoxExtension::DispatchResize( + render_view()->GetWebView()->mainFrame()); + } } -void SearchBox::OnDetermineIfPageSupportsInstant(const string16& value, - bool verbatim, - int selection_start, - int selection_end) { - value_ = value; - verbatim_ = verbatim; - selection_start_ = selection_start; - selection_end_ = selection_end; - bool result = extensions_v8::SearchBoxExtension::PageSupportsInstant( - render_view()->GetWebView()->mainFrame()); - render_view()->Send(new ChromeViewHostMsg_InstantSupportDetermined( - render_view()->GetRoutingID(), render_view()->GetPageId(), result)); +void SearchBox::OnDetermineIfPageSupportsInstant() { + if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { + bool result = extensions_v8::SearchBoxExtension::PageSupportsInstant( + render_view()->GetWebView()->mainFrame()); + render_view()->Send(new ChromeViewHostMsg_InstantSupportDetermined( + render_view()->GetRoutingID(), render_view()->GetPageId(), result)); + } } void SearchBox::Reset() { + value_.clear(); verbatim_ = false; - value_ = string16(); selection_start_ = selection_end_ = 0; rect_ = gfx::Rect(); } diff --git a/chrome/renderer/searchbox.h b/chrome/renderer/searchbox.h index 9f3c104..8447870 100644 --- a/chrome/renderer/searchbox.h +++ b/chrome/renderer/searchbox.h @@ -1,19 +1,27 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_RENDERER_SEARCHBOX_H_ #define CHROME_RENDERER_SEARCHBOX_H_ -#include <string> #include <vector> +#include "base/basictypes.h" #include "base/string16.h" #include "chrome/common/instant_types.h" #include "content/public/renderer/render_view_observer.h" #include "content/public/renderer/render_view_observer_tracker.h" #include "ui/gfx/rect.h" +namespace content { +class RenderView; +} + +namespace IPC { +class Message; +} + class SearchBox : public content::RenderViewObserver, public content::RenderViewObserverTracker<SearchBox> { public: @@ -21,13 +29,13 @@ class SearchBox : public content::RenderViewObserver, virtual ~SearchBox(); // Sends ViewHostMsg_SetSuggestions to the browser. - void SetSuggestions(const std::vector<std::string>& suggestions, + void SetSuggestions(const std::vector<string16>& suggestions, InstantCompleteBehavior behavior); const string16& value() const { return value_; } bool verbatim() const { return verbatim_; } - uint32 selection_start() const { return selection_start_; } - uint32 selection_end() const { return selection_end_; } + size_t selection_start() const { return selection_start_; } + size_t selection_end() const { return selection_end_; } gfx::Rect GetRect(); private: @@ -36,23 +44,20 @@ class SearchBox : public content::RenderViewObserver, void OnChange(const string16& value, bool verbatim, - int selection_start, - int selection_end); - void OnSubmit(const string16& value, bool verbatim); - void OnCancel(); + size_t selection_start, + size_t selection_end); + void OnSubmit(const string16& value); + void OnCancel(const string16& value); void OnResize(const gfx::Rect& bounds); - void OnDetermineIfPageSupportsInstant(const string16& value, - bool verbatim, - int selection_start, - int selection_end); + void OnDetermineIfPageSupportsInstant(); // Sets the searchbox values to their initial value. void Reset(); string16 value_; bool verbatim_; - uint32 selection_start_; - uint32 selection_end_; + size_t selection_start_; + size_t selection_end_; gfx::Rect rect_; DISALLOW_COPY_AND_ASSIGN(SearchBox); diff --git a/chrome/renderer/searchbox_extension.cc b/chrome/renderer/searchbox_extension.cc index 29bddcf..fe027bb 100644 --- a/chrome/renderer/searchbox_extension.cc +++ b/chrome/renderer/searchbox_extension.cc @@ -4,27 +4,14 @@ #include "chrome/renderer/searchbox_extension.h" -#include <string> -#include <vector> - -#include "base/basictypes.h" -#include "base/command_line.h" -#include "base/string_split.h" -#include "base/stringprintf.h" #include "chrome/renderer/searchbox.h" #include "content/public/renderer/render_view.h" #include "grit/renderer_resources.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" #include "ui/base/resource/resource_bundle.h" #include "v8/include/v8.h" -using WebKit::WebFrame; -using WebKit::WebScriptSource; -using WebKit::WebString; -using WebKit::WebView; - namespace extensions_v8 { static const char kSearchBoxExtensionName[] = "v8/SearchBox"; @@ -65,59 +52,17 @@ static const char kDispatchResizeEventScript[] = " true;" "}"; -// Deprecated API support. -// TODO(tonyg): Remove these when they are no longer used. -// ---------------------------------------------------------------------------- -// Script sent as the user is typing and the provider supports instant. -// Params: -// . the text the user typed. -// '46' forces the server to give us verbatim results. -static const char kUserInputScript[] = - "if (window.chrome.userInput)" - " window.chrome.userInput(" - " window.chrome.searchBox.value," - " window.chrome.searchBox.verbatim ? 46 : 0," - " window.chrome.searchBox.selectionStart);"; - -// Script sent when the page is committed and the provider supports instant. -// Params: -// . the text the user typed. -// . boolean indicating if the user pressed enter to accept the text. -static const char kUserDoneScript[] = - "if (window.chrome.userWantsQuery)" - " window.chrome.userWantsQuery(" - " window.chrome.searchBox.value," - " window.chrome.searchBox.verbatim);"; - -// Script sent when the bounds of the omnibox changes and the provider supports -// instant. The params are the bounds relative to the origin of the preview -// (x, y, width, height). -static const char kSetOmniboxBoundsScript[] = - "if (window.chrome.setDropdownDimensions)" - " window.chrome.setDropdownDimensions(" - " window.chrome.searchBox.x," - " window.chrome.searchBox.y," - " window.chrome.searchBox.width," - " window.chrome.searchBox.height);"; - // We first send this script down to determine if the page supports instant. static const char kSupportsInstantScript[] = - "if (window.chrome.sv) true; else false;"; - -// The google.y.first array is a list of functions which are to be executed -// after the external JavaScript used by Google web search loads. The deprecated -// API requires setDropdownDimensions and userInput to be invoked after -// the external JavaScript loads. So if they are not already registered, we add -// them to the array of functions the page will execute after load. This tight -// coupling discourages proliferation of the deprecated API. -static const char kInitScript[] = - "(function() {" - "var initScript = function(){%s%s};" - "if (window.chrome.setDropdownDimensions)" - " initScript();" - "else if (window.google && window.google.y)" - " window.google.y.first.push(initScript);" - "})();"; + "if (window.chrome &&" + " window.chrome.searchBox &&" + " window.chrome.searchBox.onsubmit &&" + " typeof window.chrome.searchBox.onsubmit == 'function') {" + " true;" + "} else {" + " false;" + "}"; + // ---------------------------------------------------------------------------- class SearchBoxExtensionWrapper : public v8::Extension { @@ -169,7 +114,8 @@ class SearchBoxExtensionWrapper : public v8::Extension { SearchBoxExtensionWrapper::SearchBoxExtensionWrapper( const base::StringPiece& code) - : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) {} + : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) { +} v8::Handle<v8::FunctionTemplate> SearchBoxExtensionWrapper::GetNativeFunction( v8::Handle<v8::String> name) { @@ -197,12 +143,12 @@ v8::Handle<v8::FunctionTemplate> SearchBoxExtensionWrapper::GetNativeFunction( // static content::RenderView* SearchBoxExtensionWrapper::GetRenderView() { - WebFrame* webframe = WebFrame::frameForEnteredContext(); + WebKit::WebFrame* webframe = WebKit::WebFrame::frameForEnteredContext(); DCHECK(webframe) << "There should be an active frame since we just got " - "a native function called."; + "a native function called."; if (!webframe) return NULL; - WebView* webview = webframe->view(); + WebKit::WebView* webview = webframe->view(); if (!webview) return NULL; // can happen during closing return content::RenderView::FromWebView(webview); @@ -215,7 +161,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetValue( if (!render_view) return v8::Undefined(); return v8::String::New( reinterpret_cast<const uint16_t*>( - SearchBox::Get(render_view)->value().c_str()), + SearchBox::Get(render_view)->value().data()), SearchBox::Get(render_view)->value().length()); } @@ -232,7 +178,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart( const v8::Arguments& args) { content::RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Int32::New(SearchBox::Get(render_view)->selection_start()); + return v8::Uint32::New(SearchBox::Get(render_view)->selection_start()); } // static @@ -240,7 +186,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionEnd( const v8::Arguments& args) { content::RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Int32::New(SearchBox::Get(render_view)->selection_end()); + return v8::Uint32::New(SearchBox::Get(render_view)->selection_end()); } // static @@ -275,36 +221,30 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetHeight( return v8::Int32::New(SearchBox::Get(render_view)->GetRect().height()); } -// Accepts a single argument in form: -// { -// suggestions: [ -// { -// value: "..." -// } -// ] -// } // static v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( const v8::Arguments& args) { - std::vector<std::string> suggestions; + std::vector<string16> suggestions; InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; - if (args.Length() && args[0]->IsArray()) { - // For backwards compatibility, also accept an array of strings. - // TODO(tonyg): Remove this when it is confirmed to be unused. - v8::Local<v8::Array> suggestions_array = - v8::Local<v8::Array>::Cast(args[0]); - uint32_t length = suggestions_array->Length(); - for (uint32_t i = 0; i < length; i++) { - std::string suggestion = *v8::String::Utf8Value( - suggestions_array->Get(v8::Integer::New(i))->ToString()); - if (!suggestion.length()) continue; - suggestions.push_back(suggestion); + if (args.Length() && args[0]->IsObject()) { + v8::Local<v8::Object> suggestion_json = args[0]->ToObject(); + + v8::Local<v8::Value> complete_value = + suggestion_json->Get(v8::String::New("complete_behavior")); + if (complete_value->IsString()) { + if (complete_value->Equals(v8::String::New("now"))) { + behavior = INSTANT_COMPLETE_NOW; + } else if (complete_value->Equals(v8::String::New("never"))) { + behavior = INSTANT_COMPLETE_NEVER; + } else if (complete_value->Equals(v8::String::New("delayed"))) { + behavior = INSTANT_COMPLETE_DELAYED; + } else { + VLOG(1) << "Unsupported complete behavior '" + << *v8::String::Utf8Value(complete_value) << "'"; + } } - } else if (args.Length() && args[0]->IsObject()) { - // Standard version, object argument. - v8::Local<v8::Object> suggestion_json = - v8::Local<v8::Object>::Cast(args[0]); + v8::Local<v8::Value> suggestions_field = suggestion_json->Get(v8::String::New("suggestions")); @@ -312,34 +252,21 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( v8::Local<v8::Array> suggestions_array = suggestions_field.As<v8::Array>(); - uint32_t length = suggestions_array->Length(); - for (uint32_t i = 0; i < length; i++) { - v8::Local<v8::Value> suggestion_value = - suggestions_array->Get(v8::Integer::New(i)); + size_t length = suggestions_array->Length(); + for (size_t i = 0; i < length; i++) { + v8::Local<v8::Value> suggestion_value = suggestions_array->Get(i); if (!suggestion_value->IsObject()) continue; - v8::Local<v8::Object> suggestion_object = - suggestion_value.As<v8::Object>(); + v8::Local<v8::Object> suggestion_object = suggestion_value->ToObject(); v8::Local<v8::Value> suggestion_object_value = suggestion_object->Get(v8::String::New("value")); if (!suggestion_object_value->IsString()) continue; - std::string suggestion = *v8::String::Utf8Value( - suggestion_object_value->ToString()); - if (!suggestion.length()) continue; + string16 suggestion(reinterpret_cast<char16*>(*v8::String::Value( + suggestion_object_value->ToString()))); suggestions.push_back(suggestion); } } - if (suggestion_json->Has(v8::String::New("complete_behavior"))) { - v8::Local<v8::Value> complete_value = - suggestion_json->Get(v8::String::New("complete_behavior")); - if (complete_value->IsString()) { - if (complete_value->Equals(v8::String::New("never"))) - behavior = INSTANT_COMPLETE_NEVER; - else if (complete_value->Equals(v8::String::New("delayed"))) - behavior = INSTANT_COMPLETE_DELAYED; - } - } } if (content::RenderView* render_view = GetRenderView()) @@ -348,62 +275,48 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( } // static -void Dispatch(WebFrame* frame, - WebString event_dispatch_script, - WebString no_event_handler_script) { +void Dispatch(WebKit::WebFrame* frame, WebKit::WebString script) { DCHECK(frame) << "Dispatch requires frame"; - if (!frame) - return; - - v8::Handle<v8::Value> result = frame->executeScriptAndReturnValue( - WebScriptSource(event_dispatch_script)); - if (result.IsEmpty() || result->IsUndefined() || result->IsNull() || - result->IsFalse()) { - frame->executeScript(WebScriptSource(no_event_handler_script)); - } + if (!frame) return; + frame->executeScript(WebKit::WebScriptSource(script)); } // static -void SearchBoxExtension::DispatchChange(WebFrame* frame) { - Dispatch(frame, kDispatchChangeEventScript, kUserInputScript); +void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { + Dispatch(frame, kDispatchChangeEventScript); } // static -void SearchBoxExtension::DispatchSubmit(WebFrame* frame) { - Dispatch(frame, kDispatchSubmitEventScript, kUserDoneScript); +void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { + Dispatch(frame, kDispatchSubmitEventScript); } // static -void SearchBoxExtension::DispatchCancel(WebFrame* frame) { - Dispatch(frame, kDispatchCancelEventScript, kUserDoneScript); +void SearchBoxExtension::DispatchCancel(WebKit::WebFrame* frame) { + Dispatch(frame, kDispatchCancelEventScript); } // static -void SearchBoxExtension::DispatchResize(WebFrame* frame) { - Dispatch(frame, kDispatchResizeEventScript, kSetOmniboxBoundsScript); +void SearchBoxExtension::DispatchResize(WebKit::WebFrame* frame) { + Dispatch(frame, kDispatchResizeEventScript); } // static -bool SearchBoxExtension::PageSupportsInstant(WebFrame* frame) { +bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { DCHECK(frame) << "PageSupportsInstant requires frame"; if (!frame) return false; v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( - WebScriptSource(kSupportsInstantScript)); - bool supports_deprecated_api = !v.IsEmpty() && v->BooleanValue(); - // TODO(tonyg): Add way of detecting instant support to SearchBox API. - bool supports_searchbox_api = supports_deprecated_api; - - // The deprecated API needs to notify the page of events it may have missed. - // This isn't necessary in the SearchBox API, since the page can query the - // API at any time. - CR_DEFINE_STATIC_LOCAL(std::string, init_script, - (StringPrintf(kInitScript, kSetOmniboxBoundsScript, kUserInputScript))); - if (supports_deprecated_api) { - frame->executeScript(WebScriptSource(WebString::fromUTF8(init_script))); - } + WebKit::WebScriptSource(kSupportsInstantScript)); + bool supports_instant = !v.IsEmpty() && v->BooleanValue(); + + // Send a resize message to tell the page that Chrome is actively using the + // searchbox API with it. The page uses the message to transition from + // "homepage" mode to "search" mode. + if (supports_instant) + DispatchResize(frame); - return supports_searchbox_api || supports_deprecated_api; + return supports_instant; } // static diff --git a/chrome/renderer/searchbox_extension.h b/chrome/renderer/searchbox_extension.h index 1c52ab4..04f1e00 100644 --- a/chrome/renderer/searchbox_extension.h +++ b/chrome/renderer/searchbox_extension.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. |