summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorsreeram@chromium.org <sreeram@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-09 15:27:05 +0000
committersreeram@chromium.org <sreeram@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-09 15:27:05 +0000
commitc55e3b884d3ff31f14db933c1b5ff2164b446af6 (patch)
tree7be3803c0a7c5860a9ab96e8c244d919592fd3ee /chrome/renderer
parent12c3ee69a3c5cd105f8c2833b8c4082b38d098e3 (diff)
downloadchromium_src-c55e3b884d3ff31f14db933c1b5ff2164b446af6.zip
chromium_src-c55e3b884d3ff31f14db933c1b5ff2164b446af6.tar.gz
chromium_src-c55e3b884d3ff31f14db933c1b5ff2164b446af6.tar.bz2
Remove Instant v1 API.
In the process, refactors the Instant code so that all logic is centralized in the InstantController. InstantLoader now merely forwards messages between InstantController and the renderer. BUG=none R=sky@chromium.org TEST=Instant works as before when enabled from chrome://settings/. Review URL: https://chromiumcodereview.appspot.com/10836031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150795 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc5
-rw-r--r--chrome/renderer/search_extension.cc94
-rw-r--r--chrome/renderer/search_extension.h23
-rw-r--r--chrome/renderer/searchbox.cc60
-rw-r--r--chrome/renderer/searchbox.h35
-rw-r--r--chrome/renderer/searchbox_extension.cc211
-rw-r--r--chrome/renderer/searchbox_extension.h2
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.