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

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: virtual 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 // Populates a Javascript NativeSuggestions object from |result|.
136 // NOTE: Includes properties like "contents" which should be erased before the
137 // suggestion is returned to the Instant page.
138 v8::Handle<v8::Object> GenerateNativeSuggestion(
139 const string16& query,
140 InstantRestrictedID restricted_id,
141 const InstantAutocompleteResult& result) {
142 v8::Handle<v8::Object> obj = v8::Object::New();
143 obj->Set(v8::String::New("provider"), UTF16ToV8String(result.provider));
144 obj->Set(v8::String::New("type"), UTF16ToV8String(result.type));
145 obj->Set(v8::String::New("description"), UTF16ToV8String(result.description));
146 obj->Set(v8::String::New("destination_url"),
147 UTF16ToV8String(result.destination_url));
148 if (result.search_query.empty()) {
149 string16 url = result.destination_url;
150 FormatURLForDisplay(&url, query);
151 obj->Set(v8::String::New("contents"), UTF16ToV8String(url));
152 } else {
153 obj->Set(v8::String::New("contents"), UTF16ToV8String(result.search_query));
154 obj->Set(v8::String::New("is_search"), v8::Boolean::New(true));
155 }
156 obj->Set(v8::String::New("rid"), v8::Uint32::New(restricted_id));
157
158 v8::Handle<v8::Object> ranking_data = v8::Object::New();
159 ranking_data->Set(v8::String::New("relevance"),
160 v8::Int32::New(result.relevance));
161 obj->Set(v8::String::New("rankingData"), ranking_data);
162 return obj;
163 }
164
97 } // namespace 165 } // namespace
98 166
99 namespace extensions_v8 { 167 namespace extensions_v8 {
100 168
101 static const char kSearchBoxExtensionName[] = "v8/EmbeddedSearch"; 169 static const char kSearchBoxExtensionName[] = "v8/EmbeddedSearch";
102 170
103 static const char kDispatchChangeEventScript[] = 171 static const char kDispatchChangeEventScript[] =
104 "if (window.chrome &&" 172 "if (window.chrome &&"
105 " window.chrome.embeddedSearch &&" 173 " window.chrome.embeddedSearch &&"
106 " window.chrome.embeddedSearch.searchBox &&" 174 " window.chrome.embeddedSearch.searchBox &&"
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 394
327 // Gets whether the browser is capturing key strokes. 395 // Gets whether the browser is capturing key strokes.
328 static v8::Handle<v8::Value> IsKeyCaptureEnabled(const v8::Arguments& args); 396 static v8::Handle<v8::Value> IsKeyCaptureEnabled(const v8::Arguments& args);
329 397
330 // Gets the font family of the text in the omnibox. 398 // Gets the font family of the text in the omnibox.
331 static v8::Handle<v8::Value> GetFont(const v8::Arguments& args); 399 static v8::Handle<v8::Value> GetFont(const v8::Arguments& args);
332 400
333 // Gets the font size of the text in the omnibox. 401 // Gets the font size of the text in the omnibox.
334 static v8::Handle<v8::Value> GetFontSize(const v8::Arguments& args); 402 static v8::Handle<v8::Value> GetFontSize(const v8::Arguments& args);
335 403
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 404 // 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 405 // restricted ID. The two variants handle restricted IDs in their
342 // respective namespaces. 406 // respective namespaces.
343 static v8::Handle<v8::Value> NavigateSearchBox(const v8::Arguments& args); 407 static v8::Handle<v8::Value> NavigateSearchBox(const v8::Arguments& args);
344 static v8::Handle<v8::Value> NavigateNewTabPage(const v8::Arguments& args); 408 static v8::Handle<v8::Value> NavigateNewTabPage(const v8::Arguments& args);
345 // DEPRECATED: TODO(sreeram): Remove when google.com no longer uses this. 409 // DEPRECATED: TODO(sreeram): Remove when google.com no longer uses this.
346 static v8::Handle<v8::Value> NavigateContentWindow(const v8::Arguments& args); 410 static v8::Handle<v8::Value> NavigateContentWindow(const v8::Arguments& args);
347 411
348 // Sets ordered suggestions. Valid for current |value|. 412 // Sets ordered suggestions. Valid for current |value|.
349 static v8::Handle<v8::Value> SetSuggestions(const v8::Arguments& args); 413 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); 435 static v8::Handle<v8::Value> FocusOmnibox(const v8::Arguments& args);
372 436
373 // Start capturing user key strokes. 437 // Start capturing user key strokes.
374 static v8::Handle<v8::Value> StartCapturingKeyStrokes( 438 static v8::Handle<v8::Value> StartCapturingKeyStrokes(
375 const v8::Arguments& args); 439 const v8::Arguments& args);
376 440
377 // Stop capturing user key strokes. 441 // Stop capturing user key strokes.
378 static v8::Handle<v8::Value> StopCapturingKeyStrokes( 442 static v8::Handle<v8::Value> StopCapturingKeyStrokes(
379 const v8::Arguments& args); 443 const v8::Arguments& args);
380 444
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. 445 // Undoes the deletion of all Most Visited itens.
385 static v8::Handle<v8::Value> UndoAllMostVisitedDeletions( 446 static v8::Handle<v8::Value> UndoAllMostVisitedDeletions(
386 const v8::Arguments& args); 447 const v8::Arguments& args);
387 448
388 // Undoes the deletion of a Most Visited item. 449 // Undoes the deletion of a Most Visited item.
389 static v8::Handle<v8::Value> UndoMostVisitedDeletion( 450 static v8::Handle<v8::Value> UndoMostVisitedDeletion(
390 const v8::Arguments& args); 451 const v8::Arguments& args);
391 452
392 // Shows any attached bars. 453 // Shows any attached bars.
393 static v8::Handle<v8::Value> ShowBars(const v8::Arguments& args); 454 static v8::Handle<v8::Value> ShowBars(const v8::Arguments& args);
394 455
395 // Hides any attached bars. When the bars are hidden, the "onbarshidden" 456 // Hides any attached bars. When the bars are hidden, the "onbarshidden"
396 // event is fired to notify the page. 457 // event is fired to notify the page.
397 static v8::Handle<v8::Value> HideBars(const v8::Arguments& args); 458 static v8::Handle<v8::Value> HideBars(const v8::Arguments& args);
398 459
399 // Returns true if the Instant page should use iframes to display suggestions. 460 // Gets the raw data for a suggestion including its content. Only callable
400 static v8::Handle<v8::Value> ShouldUseIframes(const v8::Arguments& args); 461 // by chrome-search://suggestion pages.
462 static v8::Handle<v8::Value> GetSuggestionData(const v8::Arguments& args);
401 463
402 private: 464 private:
403 DISALLOW_COPY_AND_ASSIGN(SearchBoxExtensionWrapper); 465 DISALLOW_COPY_AND_ASSIGN(SearchBoxExtensionWrapper);
404 }; 466 };
405 467
406 SearchBoxExtensionWrapper::SearchBoxExtensionWrapper( 468 SearchBoxExtensionWrapper::SearchBoxExtensionWrapper(
407 const base::StringPiece& code) 469 const base::StringPiece& code)
408 : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) { 470 : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) {
409 } 471 }
410 472
(...skipping 28 matching lines...) Expand all
439 if (name->Equals(v8::String::New("GetDisplayInstantResults"))) 501 if (name->Equals(v8::String::New("GetDisplayInstantResults")))
440 return v8::FunctionTemplate::New(GetDisplayInstantResults); 502 return v8::FunctionTemplate::New(GetDisplayInstantResults);
441 if (name->Equals(v8::String::New("GetThemeBackgroundInfo"))) 503 if (name->Equals(v8::String::New("GetThemeBackgroundInfo")))
442 return v8::FunctionTemplate::New(GetThemeBackgroundInfo); 504 return v8::FunctionTemplate::New(GetThemeBackgroundInfo);
443 if (name->Equals(v8::String::New("IsKeyCaptureEnabled"))) 505 if (name->Equals(v8::String::New("IsKeyCaptureEnabled")))
444 return v8::FunctionTemplate::New(IsKeyCaptureEnabled); 506 return v8::FunctionTemplate::New(IsKeyCaptureEnabled);
445 if (name->Equals(v8::String::New("GetFont"))) 507 if (name->Equals(v8::String::New("GetFont")))
446 return v8::FunctionTemplate::New(GetFont); 508 return v8::FunctionTemplate::New(GetFont);
447 if (name->Equals(v8::String::New("GetFontSize"))) 509 if (name->Equals(v8::String::New("GetFontSize")))
448 return v8::FunctionTemplate::New(GetFontSize); 510 return v8::FunctionTemplate::New(GetFontSize);
449 if (name->Equals(v8::String::New("GetSuggestionIframeURLPrefix")))
450 return v8::FunctionTemplate::New(GetSuggestionIframeURLPrefix);
451 if (name->Equals(v8::String::New("NavigateSearchBox"))) 511 if (name->Equals(v8::String::New("NavigateSearchBox")))
452 return v8::FunctionTemplate::New(NavigateSearchBox); 512 return v8::FunctionTemplate::New(NavigateSearchBox);
453 if (name->Equals(v8::String::New("NavigateNewTabPage"))) 513 if (name->Equals(v8::String::New("NavigateNewTabPage")))
454 return v8::FunctionTemplate::New(NavigateNewTabPage); 514 return v8::FunctionTemplate::New(NavigateNewTabPage);
455 if (name->Equals(v8::String::New("NavigateContentWindow"))) 515 if (name->Equals(v8::String::New("NavigateContentWindow")))
456 return v8::FunctionTemplate::New(NavigateContentWindow); 516 return v8::FunctionTemplate::New(NavigateContentWindow);
457 if (name->Equals(v8::String::New("SetSuggestions"))) 517 if (name->Equals(v8::String::New("SetSuggestions")))
458 return v8::FunctionTemplate::New(SetSuggestions); 518 return v8::FunctionTemplate::New(SetSuggestions);
459 if (name->Equals(v8::String::New("SetSuggestion"))) 519 if (name->Equals(v8::String::New("SetSuggestion")))
460 return v8::FunctionTemplate::New(SetSuggestion); 520 return v8::FunctionTemplate::New(SetSuggestion);
461 if (name->Equals(v8::String::New("SetSuggestionFromAutocompleteResult"))) 521 if (name->Equals(v8::String::New("SetSuggestionFromAutocompleteResult")))
462 return v8::FunctionTemplate::New(SetSuggestionFromAutocompleteResult); 522 return v8::FunctionTemplate::New(SetSuggestionFromAutocompleteResult);
463 if (name->Equals(v8::String::New("SetQuery"))) 523 if (name->Equals(v8::String::New("SetQuery")))
464 return v8::FunctionTemplate::New(SetQuery); 524 return v8::FunctionTemplate::New(SetQuery);
465 if (name->Equals(v8::String::New("SetQueryFromAutocompleteResult"))) 525 if (name->Equals(v8::String::New("SetQueryFromAutocompleteResult")))
466 return v8::FunctionTemplate::New(SetQueryFromAutocompleteResult); 526 return v8::FunctionTemplate::New(SetQueryFromAutocompleteResult);
467 if (name->Equals(v8::String::New("ShowOverlay"))) 527 if (name->Equals(v8::String::New("ShowOverlay")))
468 return v8::FunctionTemplate::New(ShowOverlay); 528 return v8::FunctionTemplate::New(ShowOverlay);
469 if (name->Equals(v8::String::New("FocusOmnibox"))) 529 if (name->Equals(v8::String::New("FocusOmnibox")))
470 return v8::FunctionTemplate::New(FocusOmnibox); 530 return v8::FunctionTemplate::New(FocusOmnibox);
471 if (name->Equals(v8::String::New("StartCapturingKeyStrokes"))) 531 if (name->Equals(v8::String::New("StartCapturingKeyStrokes")))
472 return v8::FunctionTemplate::New(StartCapturingKeyStrokes); 532 return v8::FunctionTemplate::New(StartCapturingKeyStrokes);
473 if (name->Equals(v8::String::New("StopCapturingKeyStrokes"))) 533 if (name->Equals(v8::String::New("StopCapturingKeyStrokes")))
474 return v8::FunctionTemplate::New(StopCapturingKeyStrokes); 534 return v8::FunctionTemplate::New(StopCapturingKeyStrokes);
475 if (name->Equals(v8::String::New("SetSuggestionStyle")))
476 return v8::FunctionTemplate::New(SetSuggestionStyle);
477 if (name->Equals(v8::String::New("UndoAllMostVisitedDeletions"))) 535 if (name->Equals(v8::String::New("UndoAllMostVisitedDeletions")))
478 return v8::FunctionTemplate::New(UndoAllMostVisitedDeletions); 536 return v8::FunctionTemplate::New(UndoAllMostVisitedDeletions);
479 if (name->Equals(v8::String::New("UndoMostVisitedDeletion"))) 537 if (name->Equals(v8::String::New("UndoMostVisitedDeletion")))
480 return v8::FunctionTemplate::New(UndoMostVisitedDeletion); 538 return v8::FunctionTemplate::New(UndoMostVisitedDeletion);
481 if (name->Equals(v8::String::New("ShowBars"))) 539 if (name->Equals(v8::String::New("ShowBars")))
482 return v8::FunctionTemplate::New(ShowBars); 540 return v8::FunctionTemplate::New(ShowBars);
483 if (name->Equals(v8::String::New("HideBars"))) 541 if (name->Equals(v8::String::New("HideBars")))
484 return v8::FunctionTemplate::New(HideBars); 542 return v8::FunctionTemplate::New(HideBars);
485 if (name->Equals(v8::String::New("ShouldUseIframes"))) 543 if (name->Equals(v8::String::New("GetSuggestionData")))
486 return v8::FunctionTemplate::New(ShouldUseIframes); 544 return v8::FunctionTemplate::New(GetSuggestionData);
487 return v8::Handle<v8::FunctionTemplate>(); 545 return v8::Handle<v8::FunctionTemplate>();
488 } 546 }
489 547
490 // static 548 // static
491 content::RenderView* SearchBoxExtensionWrapper::GetRenderView() { 549 content::RenderView* SearchBoxExtensionWrapper::GetRenderView() {
492 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext(); 550 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext();
493 if (!webframe) return NULL; 551 if (!webframe) return NULL;
494 552
495 WebKit::WebView* webview = webframe->view(); 553 WebKit::WebView* webview = webframe->view();
496 if (!webview) return NULL; // can happen during closing 554 if (!webview) return NULL; // can happen during closing
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 const v8::Arguments& args) { 650 const v8::Arguments& args) {
593 content::RenderView* render_view = GetRenderView(); 651 content::RenderView* render_view = GetRenderView();
594 if (!render_view) return v8::Undefined(); 652 if (!render_view) return v8::Undefined();
595 653
596 std::vector<InstantAutocompleteResultIDPair> results; 654 std::vector<InstantAutocompleteResultIDPair> results;
597 SearchBox::Get(render_view)->GetAutocompleteResults(&results); 655 SearchBox::Get(render_view)->GetAutocompleteResults(&results);
598 656
599 DVLOG(1) << render_view << " GetAutocompleteResults: " << results.size(); 657 DVLOG(1) << render_view << " GetAutocompleteResults: " << results.size();
600 658
601 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); 659 v8::Handle<v8::Array> results_array = v8::Array::New(results.size());
660 const string16& query = SearchBox::Get(render_view)->query();
602 for (size_t i = 0; i < results.size(); ++i) { 661 for (size_t i = 0; i < results.size(); ++i) {
603 v8::Handle<v8::Object> result = v8::Object::New(); 662 results_array->Set(i, GenerateNativeSuggestion(query,
604 result->Set(v8::String::New("provider"), 663 results[i].first,
605 UTF16ToV8String(results[i].second.provider)); 664 results[i].second));
606 result->Set(v8::String::New("type"),
607 UTF16ToV8String(results[i].second.type));
608 result->Set(v8::String::New("description"),
609 UTF16ToV8String(results[i].second.description));
610 result->Set(v8::String::New("destination_url"),
611 UTF16ToV8String(results[i].second.destination_url));
612 if (results[i].second.search_query.empty()) {
613 string16 url = results[i].second.destination_url;
614 SearchBox::Get(render_view)->FormatURLForDisplay(&url);
615 result->Set(v8::String::New("contents"), UTF16ToV8String(url));
616 } else {
617 result->Set(v8::String::New("contents"),
618 UTF16ToV8String(results[i].second.search_query));
619 result->Set(v8::String::New("is_search"), v8::Boolean::New(true));
620 }
621 result->Set(v8::String::New("rid"), v8::Uint32::New(results[i].first));
622
623 v8::Handle<v8::Object> ranking_data = v8::Object::New();
624 ranking_data->Set(v8::String::New("relevance"),
625 v8::Int32::New(results[i].second.relevance));
626 result->Set(v8::String::New("rankingData"), ranking_data);
627
628 results_array->Set(i, result);
629 } 665 }
630 return results_array; 666 return results_array;
631 } 667 }
632 668
633 // static 669 // static
634 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled( 670 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled(
635 const v8::Arguments& args) { 671 const v8::Arguments& args) {
636 content::RenderView* render_view = GetRenderView(); 672 content::RenderView* render_view = GetRenderView();
637 if (!render_view) return v8::Undefined(); 673 if (!render_view) return v8::Undefined();
638 674
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 // static 803 // static
768 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetFontSize( 804 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetFontSize(
769 const v8::Arguments& args) { 805 const v8::Arguments& args) {
770 content::RenderView* render_view = GetRenderView(); 806 content::RenderView* render_view = GetRenderView();
771 if (!render_view) return v8::Undefined(); 807 if (!render_view) return v8::Undefined();
772 808
773 return v8::Uint32::New(SearchBox::Get(render_view)->omnibox_font_size()); 809 return v8::Uint32::New(SearchBox::Get(render_view)->omnibox_font_size());
774 } 810 }
775 811
776 // static 812 // static
777 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSuggestionIframeURLPrefix(
778 const v8::Arguments& args) {
779 content::RenderView* render_view = GetRenderView();
780 if (!render_view) return v8::Undefined();
781
782 return UTF8ToV8String(base::StringPrintf(
783 "%s://%s/",
784 chrome::kChromeSearchScheme,
785 chrome::kChromeSearchSuggestionHost));
786 }
787
788 // static
789 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox( 813 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox(
790 const v8::Arguments& args) { 814 const v8::Arguments& args) {
791 content::RenderView* render_view = GetRenderView(); 815 content::RenderView* render_view = GetRenderView();
792 if (!render_view || !args.Length()) return v8::Undefined(); 816 if (!render_view || !args.Length()) return v8::Undefined();
793 817
794 GURL destination_url; 818 GURL destination_url;
795 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; 819 content::PageTransition transition = content::PAGE_TRANSITION_TYPED;
796 if (args[0]->IsNumber()) { 820 if (args[0]->IsNumber()) {
797 InstantAutocompleteResult result; 821 InstantAutocompleteResult result;
798 if (SearchBox::Get(render_view)->GetAutocompleteResultWithID( 822 if (SearchBox::Get(render_view)->GetAutocompleteResultWithID(
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 return v8::Undefined(); 1193 return v8::Undefined();
1170 } 1194 }
1171 1195
1172 // static 1196 // static
1173 v8::Extension* SearchBoxExtension::Get() { 1197 v8::Extension* SearchBoxExtension::Get() {
1174 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). 1198 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance().
1175 GetRawDataResource(IDR_SEARCHBOX_API)); 1199 GetRawDataResource(IDR_SEARCHBOX_API));
1176 } 1200 }
1177 1201
1178 // static 1202 // static
1179 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestionStyle(
1180 const v8::Arguments& args) {
1181 content::RenderView* render_view = GetRenderView();
1182 if (!render_view || args.Length() < 2 || !args[0]->IsNumber() ||
1183 !args[1]->IsNumber()) {
1184 return v8::Undefined();
1185 }
1186
1187 DVLOG(1) << render_view << " SetSuggestionStyle";
1188
1189 InstantAutocompleteResultStyle style;
1190 style.url_color = args[0]->IntegerValue();
1191 style.title_color = args[1]->IntegerValue();
1192 SearchBox::Get(render_view)->SetInstantAutocompleteResultStyle(style);
1193
1194 return v8::Undefined();
1195 }
1196
1197 // static
1198 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { 1203 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) {
1199 if (!frame) return false; 1204 if (!frame) return false;
1200 v8::HandleScope handle_scope; 1205 v8::HandleScope handle_scope;
1201 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( 1206 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue(
1202 WebKit::WebScriptSource(kSupportsInstantScript)); 1207 WebKit::WebScriptSource(kSupportsInstantScript));
1203 return !v.IsEmpty() && v->BooleanValue(); 1208 return !v.IsEmpty() && v->BooleanValue();
1204 } 1209 }
1205 1210
1206 v8::Handle<v8::Value> SearchBoxExtensionWrapper::ShowBars( 1211 v8::Handle<v8::Value> SearchBoxExtensionWrapper::ShowBars(
1207 const v8::Arguments& args) { 1212 const v8::Arguments& args) {
(...skipping 10 matching lines...) Expand all
1218 const v8::Arguments& args) { 1223 const v8::Arguments& args) {
1219 content::RenderView* render_view = GetRenderView(); 1224 content::RenderView* render_view = GetRenderView();
1220 if (!render_view) return v8::Undefined(); 1225 if (!render_view) return v8::Undefined();
1221 1226
1222 DVLOG(1) << render_view << " HideBars"; 1227 DVLOG(1) << render_view << " HideBars";
1223 SearchBox::Get(render_view)->HideBars(); 1228 SearchBox::Get(render_view)->HideBars();
1224 return v8::Undefined(); 1229 return v8::Undefined();
1225 } 1230 }
1226 1231
1227 // static 1232 // static
1228 v8::Handle<v8::Value> SearchBoxExtensionWrapper::ShouldUseIframes( 1233 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSuggestionData(
1229 const v8::Arguments& args) { 1234 const v8::Arguments& args) {
1230 DVLOG(1) << "ShouldUseIframes"; 1235 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext();
1231 return v8::Boolean::New(SearchBox::ShouldUseIframes()); 1236 if (!webframe) return v8::Undefined();
1237 WebKit::WebView* webview = webframe->view();
1238 if (!webview) return v8::Undefined(); // Can happen during closing.
1239 content::RenderView* render_view = content::RenderView::FromWebView(webview);
1240 if (!render_view) return v8::Undefined();
1241
1242 // If origin does not match, return undefined.
1243 GURL url(webframe->document().url());
1244 if (!url.SchemeIs(chrome::kChromeSearchScheme) ||
1245 url.host() != chrome::kChromeSearchSuggestionHost) {
1246 return v8::Undefined();
1247 }
1248
1249 // Need an rid argument.
1250 if (args.Length() < 1 || !args[0]->IsNumber())
1251 return v8::Undefined();
1252
1253 DVLOG(1) << render_view << " GetSuggestionData";
1254 InstantRestrictedID restricted_id = args[0]->IntegerValue();
1255 InstantAutocompleteResult result;
1256 if (!SearchBox::Get(render_view)->GetAutocompleteResultWithID(
1257 restricted_id, &result)) {
1258 return v8::Undefined();
1259 }
1260 const string16& query = SearchBox::Get(render_view)->query();
1261 return GenerateNativeSuggestion(query, restricted_id, result);
1232 } 1262 }
1233 1263
1234 // static 1264 // static
1235 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { 1265 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) {
1236 Dispatch(frame, kDispatchChangeEventScript); 1266 Dispatch(frame, kDispatchChangeEventScript);
1237 } 1267 }
1238 1268
1239 // static 1269 // static
1240 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { 1270 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) {
1241 Dispatch(frame, kDispatchSubmitEventScript); 1271 Dispatch(frame, kDispatchSubmitEventScript);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 void SearchBoxExtension::DispatchMostVisitedChanged( 1324 void SearchBoxExtension::DispatchMostVisitedChanged(
1295 WebKit::WebFrame* frame) { 1325 WebKit::WebFrame* frame) {
1296 Dispatch(frame, kDispatchMostVisitedChangedScript); 1326 Dispatch(frame, kDispatchMostVisitedChangedScript);
1297 } 1327 }
1298 1328
1299 void SearchBoxExtension::DispatchBarsHidden(WebKit::WebFrame* frame) { 1329 void SearchBoxExtension::DispatchBarsHidden(WebKit::WebFrame* frame) {
1300 Dispatch(frame, kDispatchBarsHiddenEventScript); 1330 Dispatch(frame, kDispatchBarsHiddenEventScript);
1301 } 1331 }
1302 1332
1303 } // namespace extensions_v8 1333 } // namespace extensions_v8
OLDNEW
« no previous file with comments | « chrome/renderer/searchbox/searchbox.cc ('k') | content/browser/webui/url_data_manager_backend.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698