summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorsreeram@chromium.org <sreeram@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-14 05:31:51 +0000
committersreeram@chromium.org <sreeram@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-14 05:31:51 +0000
commit6dcd2576b1fa59d3b5cdbc462ccad39a447c2985 (patch)
tree69cd8c808a971e62cde8d82ab4d3cca0dce331c2 /chrome/renderer
parent3f005c228392762826a6ab1aaafe6dd31d31518d (diff)
downloadchromium_src-6dcd2576b1fa59d3b5cdbc462ccad39a447c2985.zip
chromium_src-6dcd2576b1fa59d3b5cdbc462ccad39a447c2985.tar.gz
chromium_src-6dcd2576b1fa59d3b5cdbc462ccad39a447c2985.tar.bz2
Send match type for Instant extended mode.
Also: + Remove deprecated SetPreviewHeight(). + Rename contents to description. + Remove is_search. We don't support non-URL entries in the native (restricted) autocomplete results. + Other cosmetic changes. BUG=159740 R=sky@chromium.org,dcblack@chromium.org,jschuh@chromium.org TEST=none; no change in functionality. Review URL: https://chromiumcodereview.appspot.com/11312175 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167607 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/resources/extensions/searchbox/searchbox_api.js18
-rw-r--r--chrome/renderer/searchbox/searchbox.cc4
-rw-r--r--chrome/renderer/searchbox/searchbox.h2
-rw-r--r--chrome/renderer/searchbox/searchbox_extension.cc420
4 files changed, 177 insertions, 267 deletions
diff --git a/chrome/renderer/resources/extensions/searchbox/searchbox_api.js b/chrome/renderer/resources/extensions/searchbox/searchbox_api.js
index 36d30d6..23d4ce2 100644
--- a/chrome/renderer/resources/extensions/searchbox/searchbox_api.js
+++ b/chrome/renderer/resources/extensions/searchbox/searchbox_api.js
@@ -10,7 +10,6 @@ if (!chrome.searchBox) {
// =========================================================================
// Constants
// =========================================================================
-
var MAX_CLIENT_SUGGESTIONS_TO_DEDUPE = 6;
var MAX_ALLOWED_DEDUPE_ATTEMPTS = 5;
@@ -38,7 +37,6 @@ if (!chrome.searchBox) {
native function SetQuerySuggestionFromAutocompleteResult();
native function SetQuery();
native function SetQueryFromAutocompleteResult();
- native function SetPreviewHeight();
native function Show();
// Returns the |restrictedText| wrapped in a ShadowDOM.
@@ -185,21 +183,17 @@ if (!chrome.searchBox) {
this.setAutocompleteText = function(text, behavior) {
SetQuerySuggestion(text, behavior);
};
- this.setRestrictedAutocompleteText = function(resultId, behavior) {
- SetQuerySuggestionFromAutocompleteResult(resultId, behavior);
+ this.setRestrictedAutocompleteText = function(resultId) {
+ SetQuerySuggestionFromAutocompleteResult(resultId);
};
this.setValue = function(text, type) {
SetQuery(text, type);
};
- this.setRestrictedValue = function(resultId, behavior) {
- SetQueryFromAutocompleteResult(resultId, behavior);
- };
- // Deprecated. TODO(jered): Delete this once it is no longer called.
- this.setNonNativeDropdownHeight = function(height) {
- SetPreviewHeight(height);
+ this.setRestrictedValue = function(resultId) {
+ SetQueryFromAutocompleteResult(resultId);
};
- this.show = function(reason, opt_height) {
- Show(reason, opt_height);
+ this.show = function(reason, height) {
+ Show(reason, height);
};
this.markDuplicateSuggestions = function(clientSuggestions) {
return DedupeClientSuggestions(clientSuggestions);
diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc
index a41e4a9d..f074237 100644
--- a/chrome/renderer/searchbox/searchbox.cc
+++ b/chrome/renderer/searchbox/searchbox.cc
@@ -198,9 +198,11 @@ void SearchBox::OnActiveTabModeChanged(bool active_tab_is_ntp) {
void SearchBox::Reset() {
query_.clear();
verbatim_ = false;
- selection_start_ = selection_end_ = 0;
+ selection_start_ = 0;
+ selection_end_ = 0;
results_base_ = 0;
rect_ = gfx::Rect();
autocomplete_results_.clear();
is_focused_ = false;
+ active_tab_is_ntp_ = false;
}
diff --git a/chrome/renderer/searchbox/searchbox.h b/chrome/renderer/searchbox/searchbox.h
index d610561..10b3b22 100644
--- a/chrome/renderer/searchbox/searchbox.h
+++ b/chrome/renderer/searchbox/searchbox.h
@@ -36,12 +36,12 @@ class SearchBox : public content::RenderViewObserver,
int height,
InstantSizeUnits units);
- bool is_focused() const { return is_focused_; }
const string16& query() const { return query_; }
bool verbatim() const { return verbatim_; }
size_t selection_start() const { return selection_start_; }
size_t selection_end() const { return selection_end_; }
int results_base() const { return results_base_; }
+ bool is_focused() const { return is_focused_; }
bool active_tab_is_ntp() const { return active_tab_is_ntp_; }
gfx::Rect GetRect();
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc
index fda479f..54e5e91 100644
--- a/chrome/renderer/searchbox/searchbox_extension.cc
+++ b/chrome/renderer/searchbox/searchbox_extension.cc
@@ -4,9 +4,6 @@
#include "chrome/renderer/searchbox/searchbox_extension.h"
-#include <ctype.h>
-
-#include "base/string_number_conversions.h"
#include "base/stringprintf.h"
#include "base/utf_string_conversions.h"
#include "chrome/renderer/searchbox/searchbox.h"
@@ -22,19 +19,6 @@
namespace {
-// Splits the string in |number| into two pieces, a leading number token (saved
-// in |number|) and the rest (saved in |suffix|). Either piece may become empty,
-// depending on whether the input had no digits or only digits. Neither argument
-// may be NULL.
-// TODO(jered): Delete this when deleting SetPreviewHeight.
-void SplitLeadingNumberToken(std::string* number, std::string* suffix) {
- size_t i = 0;
- while (i < number->size() && isdigit((*number)[i]))
- ++i;
- suffix->assign(*number, i, number->size() - i);
- number->resize(i);
-}
-
// Converts a V8 value to a string16.
string16 V8ValueToUTF16(v8::Handle<v8::Value> v) {
v8::String::Value s(v);
@@ -46,6 +30,11 @@ v8::Handle<v8::String> UTF16ToV8String(const string16& s) {
return v8::String::New(reinterpret_cast<const uint16_t*>(s.data()), s.size());
}
+void Dispatch(WebKit::WebFrame* frame, const WebKit::WebString& script) {
+ if (!frame) return;
+ frame->executeScript(WebKit::WebScriptSource(script));
+}
+
} // namespace
namespace extensions_v8 {
@@ -220,11 +209,6 @@ class SearchBoxExtensionWrapper : public v8::Extension {
static v8::Handle<v8::Value> SetQueryFromAutocompleteResult(
const v8::Arguments& args);
- // Resize the preview to the given height.
- // Deprecated, use Show().
- // TODO(jered): Delete this once it is no longer called.
- static v8::Handle<v8::Value> SetPreviewHeight(const v8::Arguments& args);
-
// Requests the preview be shown with the specified contents and height.
static v8::Handle<v8::Value> Show(const v8::Arguments& args);
@@ -239,46 +223,42 @@ SearchBoxExtensionWrapper::SearchBoxExtensionWrapper(
v8::Handle<v8::FunctionTemplate> SearchBoxExtensionWrapper::GetNativeFunction(
v8::Handle<v8::String> name) {
- if (name->Equals(v8::String::New("GetQuery"))) {
+ if (name->Equals(v8::String::New("GetQuery")))
return v8::FunctionTemplate::New(GetQuery);
- } else if (name->Equals(v8::String::New("GetVerbatim"))) {
+ if (name->Equals(v8::String::New("GetVerbatim")))
return v8::FunctionTemplate::New(GetVerbatim);
- } else if (name->Equals(v8::String::New("GetSelectionStart"))) {
+ if (name->Equals(v8::String::New("GetSelectionStart")))
return v8::FunctionTemplate::New(GetSelectionStart);
- } else if (name->Equals(v8::String::New("GetSelectionEnd"))) {
+ if (name->Equals(v8::String::New("GetSelectionEnd")))
return v8::FunctionTemplate::New(GetSelectionEnd);
- } else if (name->Equals(v8::String::New("GetX"))) {
+ if (name->Equals(v8::String::New("GetX")))
return v8::FunctionTemplate::New(GetX);
- } else if (name->Equals(v8::String::New("GetY"))) {
+ if (name->Equals(v8::String::New("GetY")))
return v8::FunctionTemplate::New(GetY);
- } else if (name->Equals(v8::String::New("GetWidth"))) {
+ if (name->Equals(v8::String::New("GetWidth")))
return v8::FunctionTemplate::New(GetWidth);
- } else if (name->Equals(v8::String::New("GetHeight"))) {
+ if (name->Equals(v8::String::New("GetHeight")))
return v8::FunctionTemplate::New(GetHeight);
- } else if (name->Equals(v8::String::New("GetAutocompleteResults"))) {
+ if (name->Equals(v8::String::New("GetAutocompleteResults")))
return v8::FunctionTemplate::New(GetAutocompleteResults);
- } else if (name->Equals(v8::String::New("GetIsFocused"))) {
+ if (name->Equals(v8::String::New("GetIsFocused")))
return v8::FunctionTemplate::New(GetIsFocused);
- } else if (name->Equals(v8::String::New("GetContext"))) {
+ if (name->Equals(v8::String::New("GetContext")))
return v8::FunctionTemplate::New(GetContext);
- } else if (name->Equals(v8::String::New("NavigateContentWindow"))) {
+ if (name->Equals(v8::String::New("NavigateContentWindow")))
return v8::FunctionTemplate::New(NavigateContentWindow);
- } else if (name->Equals(v8::String::New("SetSuggestions"))) {
+ if (name->Equals(v8::String::New("SetSuggestions")))
return v8::FunctionTemplate::New(SetSuggestions);
- } else if (name->Equals(v8::String::New("SetQuerySuggestion"))) {
+ if (name->Equals(v8::String::New("SetQuerySuggestion")))
return v8::FunctionTemplate::New(SetQuerySuggestion);
- } else if (name->Equals(v8::String::New(
- "SetQuerySuggestionFromAutocompleteResult"))) {
+ if (name->Equals(v8::String::New("SetQuerySuggestionFromAutocompleteResult")))
return v8::FunctionTemplate::New(SetQuerySuggestionFromAutocompleteResult);
- } else if (name->Equals(v8::String::New("SetQuery"))) {
+ if (name->Equals(v8::String::New("SetQuery")))
return v8::FunctionTemplate::New(SetQuery);
- } else if (name->Equals(v8::String::New("SetQueryFromAutocompleteResult"))) {
+ if (name->Equals(v8::String::New("SetQueryFromAutocompleteResult")))
return v8::FunctionTemplate::New(SetQueryFromAutocompleteResult);
- } else if (name->Equals(v8::String::New("SetPreviewHeight"))) {
- return v8::FunctionTemplate::New(SetPreviewHeight);
- } else if (name->Equals(v8::String::New("Show"))) {
+ if (name->Equals(v8::String::New("Show")))
return v8::FunctionTemplate::New(Show);
- }
return v8::Handle<v8::FunctionTemplate>();
}
@@ -298,6 +278,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetQuery(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return UTF16ToV8String(SearchBox::Get(render_view)->query());
}
@@ -306,6 +287,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetVerbatim(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return v8::Boolean::New(SearchBox::Get(render_view)->verbatim());
}
@@ -314,6 +296,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return v8::Uint32::New(SearchBox::Get(render_view)->selection_start());
}
@@ -322,6 +305,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionEnd(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return v8::Uint32::New(SearchBox::Get(render_view)->selection_end());
}
@@ -330,6 +314,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetX(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return v8::Int32::New(SearchBox::Get(render_view)->GetRect().x());
}
@@ -338,6 +323,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetY(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return v8::Int32::New(SearchBox::Get(render_view)->GetRect().y());
}
@@ -346,6 +332,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetWidth(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return v8::Int32::New(SearchBox::Get(render_view)->GetRect().width());
}
@@ -354,6 +341,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetHeight(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return v8::Int32::New(SearchBox::Get(render_view)->GetRect().height());
}
@@ -362,18 +350,21 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
const std::vector<InstantAutocompleteResult>& results =
SearchBox::Get(render_view)->GetAutocompleteResults();
const size_t results_base = SearchBox::Get(render_view)->results_base();
+
v8::Handle<v8::Array> results_array = v8::Array::New(results.size());
for (size_t i = 0; i < results.size(); ++i) {
v8::Handle<v8::Object> result = v8::Object::New();
result->Set(v8::String::New("provider"),
UTF16ToV8String(results[i].provider));
+ result->Set(v8::String::New("type"), UTF16ToV8String(results[i].type));
result->Set(v8::String::New("contents"),
- UTF16ToV8String(results[i].contents));
+ UTF16ToV8String(results[i].description));
result->Set(v8::String::New("destination_url"),
- v8::String::New(results[i].destination_url.spec().c_str()));
+ UTF16ToV8String(results[i].destination_url));
result->Set(v8::String::New("rid"), v8::Uint32::New(results_base + i));
v8::Handle<v8::Object> ranking_data = v8::Object::New();
@@ -383,7 +374,6 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults(
results_array->Set(i, result);
}
-
return results_array;
}
@@ -392,6 +382,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetIsFocused(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
return v8::Boolean::New(SearchBox::Get(render_view)->is_focused());
}
@@ -400,6 +391,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetContext(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
if (!render_view) return v8::Undefined();
+
v8::Handle<v8::Object> context = v8::Object::New();
context->Set(
v8::String::New("isNewTabPage"),
@@ -414,93 +406,81 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow(
if (!render_view || !args.Length()) return v8::Undefined();
GURL destination_url;
- if (args[0]->IsString()) {
- destination_url = GURL(*v8::String::Utf8Value(args[0]));
- } else if (args[0]->IsNumber()) {
- // Get the restricted_id.
- const size_t restricted_id = args[0]->Uint32Value();
- const InstantAutocompleteResult* result =
- SearchBox::Get(render_view)->GetAutocompleteResultWithId(restricted_id);
+ if (args[0]->IsNumber()) {
+ const InstantAutocompleteResult* result = SearchBox::Get(render_view)->
+ GetAutocompleteResultWithId(args[0]->Uint32Value());
if (result)
- destination_url = result->destination_url;
+ destination_url = GURL(result->destination_url);
+ } else {
+ destination_url = GURL(V8ValueToUTF16(args[0]));
}
+
// Navigate the main frame.
if (destination_url.is_valid()) {
WebKit::WebURLRequest request(destination_url);
render_view->GetWebView()->mainFrame()->loadRequest(request);
}
+
return v8::Undefined();
}
// static
v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions(
const v8::Arguments& args) {
+ content::RenderView* render_view = GetRenderView();
+ if (!render_view || !args.Length()) return v8::Undefined();
+
+ v8::Handle<v8::Object> suggestion_json = args[0]->ToObject();
+
+ InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
+ InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH;
+ v8::Handle<v8::Value> complete_value =
+ suggestion_json->Get(v8::String::New("complete_behavior"));
+ 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("replace"))) {
+ behavior = INSTANT_COMPLETE_REPLACE;
+ }
+
std::vector<InstantSuggestion> suggestions;
- if (args.Length() && args[0]->IsObject()) {
- v8::Handle<v8::Object> suggestion_json = args[0]->ToObject();
-
- InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
- InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH;
- v8::Handle<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("replace"))) {
- behavior = INSTANT_COMPLETE_REPLACE;
- } else {
- VLOG(1) << "Unsupported complete behavior '"
- << *v8::String::Utf8Value(complete_value) << "'";
- }
- }
- v8::Handle<v8::Value> suggestions_field =
- suggestion_json->Get(v8::String::New("suggestions"));
- if (suggestions_field->IsArray()) {
- v8::Handle<v8::Array> suggestions_array =
- suggestions_field.As<v8::Array>();
- size_t length = suggestions_array->Length();
- for (size_t i = 0; i < length; i++) {
- v8::Handle<v8::Value> suggestion_value = suggestions_array->Get(i);
- if (!suggestion_value->IsObject()) continue;
-
- v8::Handle<v8::Object> suggestion_object = suggestion_value->ToObject();
- v8::Handle<v8::Value> suggestion_object_value =
- suggestion_object->Get(v8::String::New("value"));
- if (!suggestion_object_value->IsString()) continue;
- string16 text = V8ValueToUTF16(suggestion_object_value);
-
- suggestions.push_back(InstantSuggestion(text, behavior, type));
- }
+ v8::Handle<v8::Value> suggestions_field =
+ suggestion_json->Get(v8::String::New("suggestions"));
+ if (suggestions_field->IsArray()) {
+ v8::Handle<v8::Array> suggestions_array = suggestions_field.As<v8::Array>();
+ for (size_t i = 0; i < suggestions_array->Length(); i++) {
+ string16 text = V8ValueToUTF16(
+ suggestions_array->Get(i)->ToObject()->Get(v8::String::New("value")));
+ suggestions.push_back(InstantSuggestion(text, behavior, type));
}
}
- if (content::RenderView* render_view = GetRenderView())
- SearchBox::Get(render_view)->SetSuggestions(suggestions);
+ SearchBox::Get(render_view)->SetSuggestions(suggestions);
+
return v8::Undefined();
}
// static
v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuerySuggestion(
const v8::Arguments& args) {
- if (1 <= args.Length() && args.Length() <= 2 && args[0]->IsString()) {
- string16 text = V8ValueToUTF16(args[0]);
- InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
- InstantSuggestionType type = INSTANT_SUGGESTION_URL;
-
- if (args.Length() >= 2 && args[1]->Uint32Value() == 2) {
- behavior = INSTANT_COMPLETE_NEVER;
- type = INSTANT_SUGGESTION_SEARCH;
- }
+ content::RenderView* render_view = GetRenderView();
+ if (!render_view || args.Length() < 2) return v8::Undefined();
- if (content::RenderView* render_view = GetRenderView()) {
- std::vector<InstantSuggestion> suggestions;
- suggestions.push_back(InstantSuggestion(text, behavior, type));
- SearchBox::Get(render_view)->SetSuggestions(suggestions);
- }
+ string16 text = V8ValueToUTF16(args[0]);
+ InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
+ InstantSuggestionType type = INSTANT_SUGGESTION_URL;
+
+ if (args[1]->Uint32Value() == 2) {
+ behavior = INSTANT_COMPLETE_NEVER;
+ type = INSTANT_SUGGESTION_SEARCH;
}
+
+ std::vector<InstantSuggestion> suggestions;
+ suggestions.push_back(InstantSuggestion(text, behavior, type));
+ SearchBox::Get(render_view)->SetSuggestions(suggestions);
+
return v8::Undefined();
}
@@ -509,52 +489,41 @@ v8::Handle<v8::Value>
SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
- if (1 <= args.Length() && args.Length() <= 2 && args[0]->IsNumber() &&
- render_view) {
- const size_t results_id = args[0]->Uint32Value();
-
- const InstantAutocompleteResult* result =
- SearchBox::Get(render_view)->GetAutocompleteResultWithId(results_id);
- if (result) {
- string16 text = UTF8ToUTF16(result->destination_url.spec());
- InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
- InstantSuggestionType type = INSTANT_SUGGESTION_URL;
-
- if (args.Length() >= 2 && args[1]->Uint32Value() == 2)
- behavior = INSTANT_COMPLETE_NEVER;
-
- if (result->is_search) {
- text = result->contents;
- type = INSTANT_SUGGESTION_SEARCH;
- }
-
- std::vector<InstantSuggestion> suggestions;
- suggestions.push_back(InstantSuggestion(text, behavior, type));
- SearchBox::Get(render_view)->SetSuggestions(suggestions);
- } else {
- VLOG(1) << "Invalid results_id " << results_id;
- }
- }
+ if (!render_view || !args.Length()) return v8::Undefined();
+
+ const InstantAutocompleteResult* result = SearchBox::Get(render_view)->
+ GetAutocompleteResultWithId(args[0]->Uint32Value());
+ if (!result) return v8::Undefined();
+
+ // We only support selecting autocomplete results that are URLs.
+ string16 text = result->destination_url;
+ InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
+ InstantSuggestionType type = INSTANT_SUGGESTION_URL;
+
+ std::vector<InstantSuggestion> suggestions;
+ suggestions.push_back(InstantSuggestion(text, behavior, type));
+ SearchBox::Get(render_view)->SetSuggestions(suggestions);
+
return v8::Undefined();
}
// static
v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuery(
const v8::Arguments& args) {
- if (1 <= args.Length() && args.Length() <= 2 && args[0]->IsString()) {
- string16 text = V8ValueToUTF16(args[0]);
- InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE;
- InstantSuggestionType type = INSTANT_SUGGESTION_URL;
+ content::RenderView* render_view = GetRenderView();
+ if (!render_view || args.Length() < 2) return v8::Undefined();
- if (args.Length() >= 2 && args[1]->Uint32Value() == 0)
- type = INSTANT_SUGGESTION_SEARCH;
+ string16 text = V8ValueToUTF16(args[0]);
+ InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE;
+ InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH;
+
+ if (args[1]->Uint32Value() == 1)
+ type = INSTANT_SUGGESTION_URL;
+
+ std::vector<InstantSuggestion> suggestions;
+ suggestions.push_back(InstantSuggestion(text, behavior, type));
+ SearchBox::Get(render_view)->SetSuggestions(suggestions);
- if (content::RenderView* render_view = GetRenderView()) {
- std::vector<InstantSuggestion> suggestions;
- suggestions.push_back(InstantSuggestion(text, behavior, type));
- SearchBox::Get(render_view)->SetSuggestions(suggestions);
- }
- }
return v8::Undefined();
}
@@ -562,61 +531,23 @@ v8::Handle<v8::Value>
SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
- if (1 <= args.Length() && args.Length() <= 2 && args[0]->IsNumber() &&
- render_view) {
- const size_t results_id = args[0]->Uint32Value();
- const InstantAutocompleteResult* result =
- SearchBox::Get(render_view)->GetAutocompleteResultWithId(results_id);
- if (result) {
- string16 text = UTF8ToUTF16(result->destination_url.spec());
- InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE;
- // TODO(jered): Distinguish between history URLs and search provider
- // navsuggest URLs so that we can do proper accounting on history URLs.
- InstantSuggestionType type = INSTANT_SUGGESTION_URL;
-
- if ((args.Length() >= 2 && args[1]->Uint32Value() == 0) ||
- (args.Length() < 2 && result->is_search)) {
- text = result->contents;
- type = INSTANT_SUGGESTION_SEARCH;
- }
-
- std::vector<InstantSuggestion> suggestions;
- suggestions.push_back(InstantSuggestion(text, behavior, type));
- SearchBox::Get(render_view)->SetSuggestions(suggestions);
- } else {
- VLOG(1) << "Invalid results_id " << results_id;
- }
- }
- return v8::Undefined();
-}
+ if (!render_view || !args.Length()) return v8::Undefined();
+
+ const InstantAutocompleteResult* result = SearchBox::Get(render_view)->
+ GetAutocompleteResultWithId(args[0]->Uint32Value());
+ if (!result) return v8::Undefined();
+
+ // We only support selecting autocomplete results that are URLs.
+ string16 text = result->destination_url;
+ InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE;
+ // TODO(jered): Distinguish between history URLs and search provider
+ // navsuggest URLs so that we can do proper accounting on history URLs.
+ InstantSuggestionType type = INSTANT_SUGGESTION_URL;
+
+ std::vector<InstantSuggestion> suggestions;
+ suggestions.push_back(InstantSuggestion(text, behavior, type));
+ SearchBox::Get(render_view)->SetSuggestions(suggestions);
-// static
-v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetPreviewHeight(
- const v8::Arguments& args) {
- if (args.Length() == 1) {
- int height = 0;
- InstantSizeUnits units = INSTANT_SIZE_PIXELS;
- if (args[0]->IsInt32()) {
- height = args[0]->Int32Value();
- } else if (args[0]->IsString()) {
- std::string height_str = *v8::String::Utf8Value(args[0]);
- std::string units_str;
- SplitLeadingNumberToken(&height_str, &units_str);
- if (!base::StringToInt(height_str, &height))
- return v8::Undefined();
- if (units_str == "%") {
- units = INSTANT_SIZE_PERCENT;
- } else if (!units_str.empty() && units_str != "px") {
- return v8::Undefined();
- }
- } else {
- return v8::Undefined();
- }
- content::RenderView* render_view = GetRenderView();
- if (render_view && height >= 0)
- SearchBox::Get(render_view)->ShowInstantPreview(
- INSTANT_SHOWN_NOT_SPECIFIED, height, units);
- }
return v8::Undefined();
}
@@ -624,41 +555,26 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetPreviewHeight(
v8::Handle<v8::Value> SearchBoxExtensionWrapper::Show(
const v8::Arguments& args) {
content::RenderView* render_view = GetRenderView();
- if (render_view &&
- ((args.Length() == 1 && args[0]->IsInt32()) ||
- (args.Length() == 2 && args[0]->IsInt32() && args[1]->IsInt32()))) {
- InstantShownReason reason = INSTANT_SHOWN_NOT_SPECIFIED;
- switch (args[0]->Int32Value()) {
- case 0:
- reason = INSTANT_SHOWN_NOT_SPECIFIED;
- break;
- case 1:
- reason = INSTANT_SHOWN_CUSTOM_NTP_CONTENT;
- break;
- case 2:
- reason = INSTANT_SHOWN_QUERY_SUGGESTIONS;
- break;
- case 3:
- reason = INSTANT_SHOWN_ZERO_SUGGESTIONS;
- break;
- default:
- return v8::Undefined();
- }
- int height = 100;
- InstantSizeUnits units = INSTANT_SIZE_PERCENT;
- if (args.Length() == 2) {
- height = args[1]->Int32Value();
- units = INSTANT_SIZE_PIXELS;
- }
- SearchBox::Get(render_view)->ShowInstantPreview(reason, height, units);
+ if (!render_view || args.Length() < 2) return v8::Undefined();
+
+ InstantShownReason reason = INSTANT_SHOWN_NOT_SPECIFIED;
+ switch (args[0]->Uint32Value()) {
+ case 0: reason = INSTANT_SHOWN_NOT_SPECIFIED; break;
+ case 1: reason = INSTANT_SHOWN_CUSTOM_NTP_CONTENT; break;
+ case 2: reason = INSTANT_SHOWN_QUERY_SUGGESTIONS; break;
+ case 3: reason = INSTANT_SHOWN_ZERO_SUGGESTIONS; break;
}
- return v8::Undefined();
-}
-// static
-void Dispatch(WebKit::WebFrame* frame, const WebKit::WebString& script) {
- if (!frame) return;
- frame->executeScript(WebKit::WebScriptSource(script));
+ int height = 100;
+ InstantSizeUnits units = INSTANT_SIZE_PERCENT;
+ if (args[1]->IsInt32()) {
+ height = args[1]->Int32Value();
+ units = INSTANT_SIZE_PIXELS;
+ }
+
+ SearchBox::Get(render_view)->ShowInstantPreview(reason, height, units);
+
+ return v8::Undefined();
}
// static
@@ -682,6 +598,23 @@ void SearchBoxExtension::DispatchResize(WebKit::WebFrame* frame) {
}
// static
+bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) {
+ if (!frame) return false;
+
+ v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue(
+ 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_instant;
+}
+
+// static
void SearchBoxExtension::DispatchAutocompleteResults(WebKit::WebFrame* frame) {
Dispatch(frame, kDispatchAutocompleteResultsEventScript);
}
@@ -710,28 +643,9 @@ void SearchBoxExtension::DispatchContextChange(WebKit::WebFrame* frame) {
}
// static
-bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) {
- if (!frame) return false;
-
- v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue(
- 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_instant;
-}
-
-// static
v8::Extension* SearchBoxExtension::Get() {
- const base::StringPiece code =
- ResourceBundle::GetSharedInstance().GetRawDataResource(
- IDR_SEARCHBOX_API);
- return new SearchBoxExtensionWrapper(code);
+ return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance().
+ GetRawDataResource(IDR_SEARCHBOX_API));
}
} // namespace extensions_v8