Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: chrome/renderer/searchbox/searchbox_extension.cc

Issue 13375003: Fixing iframe jank in the local omnibox popup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Include missing file. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/searchbox/searchbox_extension.h" 5 #include "chrome/renderer/searchbox/searchbox_extension.h"
6 6
7 #include "base/i18n/rtl.h" 7 #include "base/i18n/rtl.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/stringprintf.h" 9 #include "base/stringprintf.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 base::StringPrintf("chrome-search://thumb/%s", 87 base::StringPrintf("chrome-search://thumb/%s",
88 base::Uint64ToString(most_visited_item_id).c_str())); 88 base::Uint64ToString(most_visited_item_id).c_str()));
89 } 89 }
90 90
91 v8::Handle<v8::String> GenerateFaviconURL(uint64 most_visited_item_id) { 91 v8::Handle<v8::String> GenerateFaviconURL(uint64 most_visited_item_id) {
92 return UTF8ToV8String( 92 return UTF8ToV8String(
93 base::StringPrintf("chrome-search://favicon/%s", 93 base::StringPrintf("chrome-search://favicon/%s",
94 base::Uint64ToString(most_visited_item_id).c_str())); 94 base::Uint64ToString(most_visited_item_id).c_str()));
95 } 95 }
96 96
97 // If |url| starts with |prefix|, removes |prefix|.
98 void StripPrefix(string16* url, const string16& prefix) {
99 if (StartsWith(*url, prefix, true))
100 url->erase(0, prefix.length());
101 }
102
103 // Removes leading "http://" or "http://www." from |url| unless |user_input|
104 // starts with those prefixes.
105 void StripURLPrefixes(string16* url, const string16& user_input) {
106 string16 trimmed_user_input;
107 TrimWhitespace(user_input, TRIM_TRAILING, &trimmed_user_input);
108 if (StartsWith(*url, trimmed_user_input, true))
109 return;
110
111 StripPrefix(url, ASCIIToUTF16(chrome::kHttpScheme) + ASCIIToUTF16("://"));
112 if (StartsWith(*url, trimmed_user_input, true))
113 return;
114
115 StripPrefix(url, ASCIIToUTF16("www."));
116 }
117
118 // Formats a URL for display to the user. Strips out prefixes like whitespace,
119 // "http://" and "www." unless the user input (|query|) matches the prefix.
120 // Also removes trailing whitespaces and "/" unless the user input matches the
121 // trailing "/".
122 void FormatURLForDisplay(string16* url, const string16& query) {
123 StripURLPrefixes(url, query);
124
125 string16 trimmed_user_input;
126 TrimWhitespace(query, TRIM_LEADING, &trimmed_user_input);
127 if (EndsWith(*url, trimmed_user_input, true))
128 return;
129
130 // Strip a lone trailing slash.
131 if (EndsWith(*url, ASCIIToUTF16("/"), true))
132 url->erase(url->length() - 1, 1);
133 }
134
135 v8::Handle<v8::Object> GenerateNativeSuggestion(
136 const string16& query,
137 InstantRestrictedID restricted_id,
138 const InstantAutocompleteResult& result) {
139 v8::Handle<v8::Object> obj = v8::Object::New();
140 obj->Set(v8::String::New("provider"), UTF16ToV8String(result.provider));
141 obj->Set(v8::String::New("type"), UTF16ToV8String(result.type));
142 obj->Set(v8::String::New("description"), UTF16ToV8String(result.description));
143 obj->Set(v8::String::New("destination_url"),
144 UTF16ToV8String(result.destination_url));
145 if (result.search_query.empty()) {
146 string16 url = result.destination_url;
147 FormatURLForDisplay(&url, query);
148 obj->Set(v8::String::New("contents"), UTF16ToV8String(url));
149 } else {
150 obj->Set(v8::String::New("contents"), UTF16ToV8String(result.search_query));
151 obj->Set(v8::String::New("is_search"), v8::Boolean::New(true));
152 }
153 obj->Set(v8::String::New("rid"), v8::Uint32::New(restricted_id));
154
155 v8::Handle<v8::Object> ranking_data = v8::Object::New();
156 ranking_data->Set(v8::String::New("relevance"),
157 v8::Int32::New(result.relevance));
158 obj->Set(v8::String::New("rankingData"), ranking_data);
159 return obj;
160 }
97 } // namespace 161 } // namespace
98 162
99 namespace extensions_v8 { 163 namespace extensions_v8 {
100 164
101 static const char kSearchBoxExtensionName[] = "v8/EmbeddedSearch"; 165 static const char kSearchBoxExtensionName[] = "v8/EmbeddedSearch";
102 166
103 static const char kDispatchChangeEventScript[] = 167 static const char kDispatchChangeEventScript[] =
104 "if (window.chrome &&" 168 "if (window.chrome &&"
105 " window.chrome.embeddedSearch &&" 169 " window.chrome.embeddedSearch &&"
106 " window.chrome.embeddedSearch.searchBox &&" 170 " window.chrome.embeddedSearch.searchBox &&"
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 390
327 // Gets whether the browser is capturing key strokes. 391 // Gets whether the browser is capturing key strokes.
328 static v8::Handle<v8::Value> IsKeyCaptureEnabled(const v8::Arguments& args); 392 static v8::Handle<v8::Value> IsKeyCaptureEnabled(const v8::Arguments& args);
329 393
330 // Gets the font family of the text in the omnibox. 394 // Gets the font family of the text in the omnibox.
331 static v8::Handle<v8::Value> GetFont(const v8::Arguments& args); 395 static v8::Handle<v8::Value> GetFont(const v8::Arguments& args);
332 396
333 // Gets the font size of the text in the omnibox. 397 // Gets the font size of the text in the omnibox.
334 static v8::Handle<v8::Value> GetFontSize(const v8::Arguments& args); 398 static v8::Handle<v8::Value> GetFontSize(const v8::Arguments& args);
335 399
336 // Gets the URL prefix for the iframe used to display suggestions.
337 static v8::Handle<v8::Value> GetSuggestionIframeURLPrefix(
338 const v8::Arguments& args);
339
340 // Navigates the window to a URL represented by either a URL string or a 400 // Navigates the window to a URL represented by either a URL string or a
341 // restricted ID. The two variants handle restricted IDs in their 401 // restricted ID. The two variants handle restricted IDs in their
342 // respective namespaces. 402 // respective namespaces.
343 static v8::Handle<v8::Value> NavigateSearchBox(const v8::Arguments& args); 403 static v8::Handle<v8::Value> NavigateSearchBox(const v8::Arguments& args);
344 static v8::Handle<v8::Value> NavigateNewTabPage(const v8::Arguments& args); 404 static v8::Handle<v8::Value> NavigateNewTabPage(const v8::Arguments& args);
345 // DEPRECATED: TODO(sreeram): Remove when google.com no longer uses this. 405 // DEPRECATED: TODO(sreeram): Remove when google.com no longer uses this.
346 static v8::Handle<v8::Value> NavigateContentWindow(const v8::Arguments& args); 406 static v8::Handle<v8::Value> NavigateContentWindow(const v8::Arguments& args);
347 407
348 // Sets ordered suggestions. Valid for current |value|. 408 // Sets ordered suggestions. Valid for current |value|.
349 static v8::Handle<v8::Value> SetSuggestions(const v8::Arguments& args); 409 static v8::Handle<v8::Value> SetSuggestions(const v8::Arguments& args);
(...skipping 21 matching lines...) Expand all
371 static v8::Handle<v8::Value> FocusOmnibox(const v8::Arguments& args); 431 static v8::Handle<v8::Value> FocusOmnibox(const v8::Arguments& args);
372 432
373 // Start capturing user key strokes. 433 // Start capturing user key strokes.
374 static v8::Handle<v8::Value> StartCapturingKeyStrokes( 434 static v8::Handle<v8::Value> StartCapturingKeyStrokes(
375 const v8::Arguments& args); 435 const v8::Arguments& args);
376 436
377 // Stop capturing user key strokes. 437 // Stop capturing user key strokes.
378 static v8::Handle<v8::Value> StopCapturingKeyStrokes( 438 static v8::Handle<v8::Value> StopCapturingKeyStrokes(
379 const v8::Arguments& args); 439 const v8::Arguments& args);
380 440
381 // Set the CSS values for the dropdown.
382 static v8::Handle<v8::Value> SetSuggestionStyle(const v8::Arguments& args);
383
384 // Undoes the deletion of all Most Visited itens. 441 // Undoes the deletion of all Most Visited itens.
385 static v8::Handle<v8::Value> UndoAllMostVisitedDeletions( 442 static v8::Handle<v8::Value> UndoAllMostVisitedDeletions(
386 const v8::Arguments& args); 443 const v8::Arguments& args);
387 444
388 // Undoes the deletion of a Most Visited item. 445 // Undoes the deletion of a Most Visited item.
389 static v8::Handle<v8::Value> UndoMostVisitedDeletion( 446 static v8::Handle<v8::Value> UndoMostVisitedDeletion(
390 const v8::Arguments& args); 447 const v8::Arguments& args);
391 448
392 // Shows any attached bars. 449 // Shows any attached bars.
393 static v8::Handle<v8::Value> ShowBars(const v8::Arguments& args); 450 static v8::Handle<v8::Value> ShowBars(const v8::Arguments& args);
394 451
395 // Hides any attached bars. When the bars are hidden, the "onbarshidden" 452 // Hides any attached bars. When the bars are hidden, the "onbarshidden"
396 // event is fired to notify the page. 453 // event is fired to notify the page.
397 static v8::Handle<v8::Value> HideBars(const v8::Arguments& args); 454 static v8::Handle<v8::Value> HideBars(const v8::Arguments& args);
398 455
456 // Gets the raw data for a suggestion including its content. Only callable
457 // by chrome-search://suggestion pages.
458 static v8::Handle<v8::Value> GetSuggestionData(const v8::Arguments& args);
459
399 private: 460 private:
400 DISALLOW_COPY_AND_ASSIGN(SearchBoxExtensionWrapper); 461 DISALLOW_COPY_AND_ASSIGN(SearchBoxExtensionWrapper);
401 }; 462 };
402 463
403 SearchBoxExtensionWrapper::SearchBoxExtensionWrapper( 464 SearchBoxExtensionWrapper::SearchBoxExtensionWrapper(
404 const base::StringPiece& code) 465 const base::StringPiece& code)
405 : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) { 466 : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) {
406 } 467 }
407 468
408 v8::Handle<v8::FunctionTemplate> SearchBoxExtensionWrapper::GetNativeFunction( 469 v8::Handle<v8::FunctionTemplate> SearchBoxExtensionWrapper::GetNativeFunction(
(...skipping 27 matching lines...) Expand all
436 if (name->Equals(v8::String::New("GetDisplayInstantResults"))) 497 if (name->Equals(v8::String::New("GetDisplayInstantResults")))
437 return v8::FunctionTemplate::New(GetDisplayInstantResults); 498 return v8::FunctionTemplate::New(GetDisplayInstantResults);
438 if (name->Equals(v8::String::New("GetThemeBackgroundInfo"))) 499 if (name->Equals(v8::String::New("GetThemeBackgroundInfo")))
439 return v8::FunctionTemplate::New(GetThemeBackgroundInfo); 500 return v8::FunctionTemplate::New(GetThemeBackgroundInfo);
440 if (name->Equals(v8::String::New("IsKeyCaptureEnabled"))) 501 if (name->Equals(v8::String::New("IsKeyCaptureEnabled")))
441 return v8::FunctionTemplate::New(IsKeyCaptureEnabled); 502 return v8::FunctionTemplate::New(IsKeyCaptureEnabled);
442 if (name->Equals(v8::String::New("GetFont"))) 503 if (name->Equals(v8::String::New("GetFont")))
443 return v8::FunctionTemplate::New(GetFont); 504 return v8::FunctionTemplate::New(GetFont);
444 if (name->Equals(v8::String::New("GetFontSize"))) 505 if (name->Equals(v8::String::New("GetFontSize")))
445 return v8::FunctionTemplate::New(GetFontSize); 506 return v8::FunctionTemplate::New(GetFontSize);
446 if (name->Equals(v8::String::New("GetSuggestionIframeURLPrefix")))
447 return v8::FunctionTemplate::New(GetSuggestionIframeURLPrefix);
448 if (name->Equals(v8::String::New("NavigateSearchBox"))) 507 if (name->Equals(v8::String::New("NavigateSearchBox")))
449 return v8::FunctionTemplate::New(NavigateSearchBox); 508 return v8::FunctionTemplate::New(NavigateSearchBox);
450 if (name->Equals(v8::String::New("NavigateNewTabPage"))) 509 if (name->Equals(v8::String::New("NavigateNewTabPage")))
451 return v8::FunctionTemplate::New(NavigateNewTabPage); 510 return v8::FunctionTemplate::New(NavigateNewTabPage);
452 if (name->Equals(v8::String::New("NavigateContentWindow"))) 511 if (name->Equals(v8::String::New("NavigateContentWindow")))
453 return v8::FunctionTemplate::New(NavigateContentWindow); 512 return v8::FunctionTemplate::New(NavigateContentWindow);
454 if (name->Equals(v8::String::New("SetSuggestions"))) 513 if (name->Equals(v8::String::New("SetSuggestions")))
455 return v8::FunctionTemplate::New(SetSuggestions); 514 return v8::FunctionTemplate::New(SetSuggestions);
456 if (name->Equals(v8::String::New("SetSuggestion"))) 515 if (name->Equals(v8::String::New("SetSuggestion")))
457 return v8::FunctionTemplate::New(SetSuggestion); 516 return v8::FunctionTemplate::New(SetSuggestion);
458 if (name->Equals(v8::String::New("SetSuggestionFromAutocompleteResult"))) 517 if (name->Equals(v8::String::New("SetSuggestionFromAutocompleteResult")))
459 return v8::FunctionTemplate::New(SetSuggestionFromAutocompleteResult); 518 return v8::FunctionTemplate::New(SetSuggestionFromAutocompleteResult);
460 if (name->Equals(v8::String::New("SetQuery"))) 519 if (name->Equals(v8::String::New("SetQuery")))
461 return v8::FunctionTemplate::New(SetQuery); 520 return v8::FunctionTemplate::New(SetQuery);
462 if (name->Equals(v8::String::New("SetQueryFromAutocompleteResult"))) 521 if (name->Equals(v8::String::New("SetQueryFromAutocompleteResult")))
463 return v8::FunctionTemplate::New(SetQueryFromAutocompleteResult); 522 return v8::FunctionTemplate::New(SetQueryFromAutocompleteResult);
464 if (name->Equals(v8::String::New("ShowOverlay"))) 523 if (name->Equals(v8::String::New("ShowOverlay")))
465 return v8::FunctionTemplate::New(ShowOverlay); 524 return v8::FunctionTemplate::New(ShowOverlay);
466 if (name->Equals(v8::String::New("FocusOmnibox"))) 525 if (name->Equals(v8::String::New("FocusOmnibox")))
467 return v8::FunctionTemplate::New(FocusOmnibox); 526 return v8::FunctionTemplate::New(FocusOmnibox);
468 if (name->Equals(v8::String::New("StartCapturingKeyStrokes"))) 527 if (name->Equals(v8::String::New("StartCapturingKeyStrokes")))
469 return v8::FunctionTemplate::New(StartCapturingKeyStrokes); 528 return v8::FunctionTemplate::New(StartCapturingKeyStrokes);
470 if (name->Equals(v8::String::New("StopCapturingKeyStrokes"))) 529 if (name->Equals(v8::String::New("StopCapturingKeyStrokes")))
471 return v8::FunctionTemplate::New(StopCapturingKeyStrokes); 530 return v8::FunctionTemplate::New(StopCapturingKeyStrokes);
472 if (name->Equals(v8::String::New("SetSuggestionStyle")))
473 return v8::FunctionTemplate::New(SetSuggestionStyle);
474 if (name->Equals(v8::String::New("UndoAllMostVisitedDeletions"))) 531 if (name->Equals(v8::String::New("UndoAllMostVisitedDeletions")))
475 return v8::FunctionTemplate::New(UndoAllMostVisitedDeletions); 532 return v8::FunctionTemplate::New(UndoAllMostVisitedDeletions);
476 if (name->Equals(v8::String::New("UndoMostVisitedDeletion"))) 533 if (name->Equals(v8::String::New("UndoMostVisitedDeletion")))
477 return v8::FunctionTemplate::New(UndoMostVisitedDeletion); 534 return v8::FunctionTemplate::New(UndoMostVisitedDeletion);
478 if (name->Equals(v8::String::New("ShowBars"))) 535 if (name->Equals(v8::String::New("ShowBars")))
479 return v8::FunctionTemplate::New(ShowBars); 536 return v8::FunctionTemplate::New(ShowBars);
480 if (name->Equals(v8::String::New("HideBars"))) 537 if (name->Equals(v8::String::New("HideBars")))
481 return v8::FunctionTemplate::New(HideBars); 538 return v8::FunctionTemplate::New(HideBars);
539 if (name->Equals(v8::String::New("GetSuggestionData")))
540 return v8::FunctionTemplate::New(GetSuggestionData);
482 return v8::Handle<v8::FunctionTemplate>(); 541 return v8::Handle<v8::FunctionTemplate>();
483 } 542 }
484 543
485 // static 544 // static
486 content::RenderView* SearchBoxExtensionWrapper::GetRenderView() { 545 content::RenderView* SearchBoxExtensionWrapper::GetRenderView() {
487 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext(); 546 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext();
488 if (!webframe) return NULL; 547 if (!webframe) return NULL;
489 548
490 WebKit::WebView* webview = webframe->view(); 549 WebKit::WebView* webview = webframe->view();
491 if (!webview) return NULL; // can happen during closing 550 if (!webview) return NULL; // can happen during closing
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( 645 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults(
587 const v8::Arguments& args) { 646 const v8::Arguments& args) {
588 content::RenderView* render_view = GetRenderView(); 647 content::RenderView* render_view = GetRenderView();
589 if (!render_view) return v8::Undefined(); 648 if (!render_view) return v8::Undefined();
590 649
591 DVLOG(1) << render_view << " GetAutocompleteResults"; 650 DVLOG(1) << render_view << " GetAutocompleteResults";
592 std::vector<InstantAutocompleteResultIDPair> results; 651 std::vector<InstantAutocompleteResultIDPair> results;
593 SearchBox::Get(render_view)->GetAutocompleteResults(&results); 652 SearchBox::Get(render_view)->GetAutocompleteResults(&results);
594 653
595 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); 654 v8::Handle<v8::Array> results_array = v8::Array::New(results.size());
655 const string16& query = SearchBox::Get(render_view)->query();
596 for (size_t i = 0; i < results.size(); ++i) { 656 for (size_t i = 0; i < results.size(); ++i) {
597 v8::Handle<v8::Object> result = v8::Object::New(); 657 results_array->Set(i, GenerateNativeSuggestion(query,
598 result->Set(v8::String::New("provider"), 658 results[i].first,
599 UTF16ToV8String(results[i].second.provider)); 659 results[i].second));
600 result->Set(v8::String::New("type"),
601 UTF16ToV8String(results[i].second.type));
602 result->Set(v8::String::New("description"),
603 UTF16ToV8String(results[i].second.description));
604 result->Set(v8::String::New("destination_url"),
605 UTF16ToV8String(results[i].second.destination_url));
606 if (results[i].second.search_query.empty()) {
607 string16 url = results[i].second.destination_url;
608 SearchBox::Get(render_view)->FormatURLForDisplay(&url);
609 result->Set(v8::String::New("contents"), UTF16ToV8String(url));
610 } else {
611 result->Set(v8::String::New("contents"),
612 UTF16ToV8String(results[i].second.search_query));
613 result->Set(v8::String::New("is_search"), v8::Boolean::New(true));
614 }
615 result->Set(v8::String::New("rid"), v8::Uint32::New(results[i].first));
616
617 v8::Handle<v8::Object> ranking_data = v8::Object::New();
618 ranking_data->Set(v8::String::New("relevance"),
619 v8::Int32::New(results[i].second.relevance));
620 result->Set(v8::String::New("rankingData"), ranking_data);
621
622 results_array->Set(i, result);
623 } 660 }
624 return results_array; 661 return results_array;
625 } 662 }
626 663
627 // static 664 // static
628 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled( 665 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled(
629 const v8::Arguments& args) { 666 const v8::Arguments& args) {
630 content::RenderView* render_view = GetRenderView(); 667 content::RenderView* render_view = GetRenderView();
631 if (!render_view) return v8::Undefined(); 668 if (!render_view) return v8::Undefined();
632 669
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 // static 797 // static
761 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetFontSize( 798 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetFontSize(
762 const v8::Arguments& args) { 799 const v8::Arguments& args) {
763 content::RenderView* render_view = GetRenderView(); 800 content::RenderView* render_view = GetRenderView();
764 if (!render_view) return v8::Undefined(); 801 if (!render_view) return v8::Undefined();
765 802
766 return v8::Uint32::New(SearchBox::Get(render_view)->omnibox_font_size()); 803 return v8::Uint32::New(SearchBox::Get(render_view)->omnibox_font_size());
767 } 804 }
768 805
769 // static 806 // static
770 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSuggestionIframeURLPrefix(
771 const v8::Arguments& args) {
772 content::RenderView* render_view = GetRenderView();
773 if (!render_view) return v8::Undefined();
774
775 return UTF8ToV8String(base::StringPrintf(
776 "%s://%s/",
777 chrome::kChromeSearchScheme,
778 chrome::kChromeSearchSuggestionHost));
779 }
780
781 // static
782 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox( 807 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox(
783 const v8::Arguments& args) { 808 const v8::Arguments& args) {
784 content::RenderView* render_view = GetRenderView(); 809 content::RenderView* render_view = GetRenderView();
785 if (!render_view || !args.Length()) return v8::Undefined(); 810 if (!render_view || !args.Length()) return v8::Undefined();
786 811
787 GURL destination_url; 812 GURL destination_url;
788 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; 813 content::PageTransition transition = content::PAGE_TRANSITION_TYPED;
789 if (args[0]->IsNumber()) { 814 if (args[0]->IsNumber()) {
790 InstantAutocompleteResult result; 815 InstantAutocompleteResult result;
791 if (SearchBox::Get(render_view)->GetAutocompleteResultWithID( 816 if (SearchBox::Get(render_view)->GetAutocompleteResultWithID(
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 return v8::Undefined(); 1186 return v8::Undefined();
1162 } 1187 }
1163 1188
1164 // static 1189 // static
1165 v8::Extension* SearchBoxExtension::Get() { 1190 v8::Extension* SearchBoxExtension::Get() {
1166 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). 1191 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance().
1167 GetRawDataResource(IDR_SEARCHBOX_API)); 1192 GetRawDataResource(IDR_SEARCHBOX_API));
1168 } 1193 }
1169 1194
1170 // static 1195 // static
1171 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestionStyle(
1172 const v8::Arguments& args) {
1173 content::RenderView* render_view = GetRenderView();
1174 if (!render_view || args.Length() < 2 || !args[0]->IsNumber() ||
1175 !args[1]->IsNumber()) {
1176 return v8::Undefined();
1177 }
1178
1179 DVLOG(1) << render_view << " SetSuggestionStyle";
1180
1181 InstantAutocompleteResultStyle style;
1182 style.url_color = args[0]->IntegerValue();
1183 style.title_color = args[1]->IntegerValue();
1184 SearchBox::Get(render_view)->SetInstantAutocompleteResultStyle(style);
1185
1186 return v8::Undefined();
1187 }
1188
1189 // static
1190 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { 1196 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) {
1191 if (!frame) return false; 1197 if (!frame) return false;
1192 v8::HandleScope handle_scope; 1198 v8::HandleScope handle_scope;
1193 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( 1199 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue(
1194 WebKit::WebScriptSource(kSupportsInstantScript)); 1200 WebKit::WebScriptSource(kSupportsInstantScript));
1195 return !v.IsEmpty() && v->BooleanValue(); 1201 return !v.IsEmpty() && v->BooleanValue();
1196 } 1202 }
1197 1203
1198 v8::Handle<v8::Value> SearchBoxExtensionWrapper::ShowBars( 1204 v8::Handle<v8::Value> SearchBoxExtensionWrapper::ShowBars(
1199 const v8::Arguments& args) { 1205 const v8::Arguments& args) {
(...skipping 10 matching lines...) Expand all
1210 const v8::Arguments& args) { 1216 const v8::Arguments& args) {
1211 content::RenderView* render_view = GetRenderView(); 1217 content::RenderView* render_view = GetRenderView();
1212 if (!render_view) return v8::Undefined(); 1218 if (!render_view) return v8::Undefined();
1213 1219
1214 DVLOG(1) << render_view << " HideBars"; 1220 DVLOG(1) << render_view << " HideBars";
1215 SearchBox::Get(render_view)->HideBars(); 1221 SearchBox::Get(render_view)->HideBars();
1216 return v8::Undefined(); 1222 return v8::Undefined();
1217 } 1223 }
1218 1224
1219 // static 1225 // static
1226 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSuggestionData(
1227 const v8::Arguments& args) {
1228 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext();
1229 if (!webframe) return v8::Undefined();
1230 WebKit::WebView* webview = webframe->view();
1231 if (!webview) return v8::Undefined(); // Can happen during closing.
1232 content::RenderView* render_view = content::RenderView::FromWebView(webview);
1233 if (!render_view) return v8::Undefined();
1234
1235 // If origin does not match, return undefined.
1236 GURL url(webframe->document().url());
1237 if (!(url.SchemeIs(chrome::kChromeSearchScheme) &&
1238 url.host() == chrome::kChromeSearchSuggestionHost))
1239 return v8::Undefined();
1240
1241 // Need an rid argument.
1242 if (args.Length() < 1 || !args[0]->IsNumber())
1243 return v8::Undefined();
1244
1245 DVLOG(1) << render_view << " GetSuggestionData";
1246 InstantRestrictedID restricted_id = args[0]->IntegerValue();
1247 InstantAutocompleteResult result;
1248 if (!SearchBox::Get(render_view)->GetAutocompleteResultWithID(
1249 restricted_id, &result)) {
1250 return v8::Undefined();
1251 }
1252 const string16& query = SearchBox::Get(render_view)->query();
1253 return GenerateNativeSuggestion(query, restricted_id, result);
1254 }
1255
1256 // static
1220 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { 1257 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) {
1221 Dispatch(frame, kDispatchChangeEventScript); 1258 Dispatch(frame, kDispatchChangeEventScript);
1222 } 1259 }
1223 1260
1224 // static 1261 // static
1225 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { 1262 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) {
1226 Dispatch(frame, kDispatchSubmitEventScript); 1263 Dispatch(frame, kDispatchSubmitEventScript);
1227 } 1264 }
1228 1265
1229 // static 1266 // static
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 void SearchBoxExtension::DispatchMostVisitedChanged( 1316 void SearchBoxExtension::DispatchMostVisitedChanged(
1280 WebKit::WebFrame* frame) { 1317 WebKit::WebFrame* frame) {
1281 Dispatch(frame, kDispatchMostVisitedChangedScript); 1318 Dispatch(frame, kDispatchMostVisitedChangedScript);
1282 } 1319 }
1283 1320
1284 void SearchBoxExtension::DispatchBarsHidden(WebKit::WebFrame* frame) { 1321 void SearchBoxExtension::DispatchBarsHidden(WebKit::WebFrame* frame) {
1285 Dispatch(frame, kDispatchBarsHiddenEventScript); 1322 Dispatch(frame, kDispatchBarsHiddenEventScript);
1286 } 1323 }
1287 1324
1288 } // namespace extensions_v8 1325 } // namespace extensions_v8
OLDNEW
« chrome/renderer/chrome_content_renderer_client.cc ('K') | « chrome/renderer/searchbox/searchbox.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698