OLD | NEW |
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/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/i18n/rtl.h" | 8 #include "base/i18n/rtl.h" |
9 #include "base/json/string_escape.h" | 9 #include "base/json/string_escape.h" |
10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 const char kCSSBackgroundRepeat[] = "repeat"; | 52 const char kCSSBackgroundRepeat[] = "repeat"; |
53 | 53 |
54 const char kThemeAttributionFormat[] = "-webkit-image-set(" | 54 const char kThemeAttributionFormat[] = "-webkit-image-set(" |
55 "url(chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION?%s) 1x, " | 55 "url(chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION?%s) 1x, " |
56 "url(chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION@2x?%s) 2x)"; | 56 "url(chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION@2x?%s) 2x)"; |
57 | 57 |
58 const char kLTRHtmlTextDirection[] = "ltr"; | 58 const char kLTRHtmlTextDirection[] = "ltr"; |
59 const char kRTLHtmlTextDirection[] = "rtl"; | 59 const char kRTLHtmlTextDirection[] = "rtl"; |
60 | 60 |
61 // Converts a V8 value to a string16. | 61 // Converts a V8 value to a string16. |
62 base::string16 V8ValueToUTF16(v8::Handle<v8::Value> v) { | 62 base::string16 V8ValueToUTF16(v8::Local<v8::Value> v) { |
63 v8::String::Value s(v); | 63 v8::String::Value s(v); |
64 return base::string16(reinterpret_cast<const base::char16*>(*s), s.length()); | 64 return base::string16(reinterpret_cast<const base::char16*>(*s), s.length()); |
65 } | 65 } |
66 | 66 |
67 // Returns whether icon NTP is enabled by experiment. | 67 // Returns whether icon NTP is enabled by experiment. |
68 // TODO(huangs): Remove all 3 copies of this routine once Icon NTP launches. | 68 // TODO(huangs): Remove all 3 copies of this routine once Icon NTP launches. |
69 bool IsIconNTPEnabled() { | 69 bool IsIconNTPEnabled() { |
70 // Note: It's important to query the field trial state first, to ensure that | 70 // Note: It's important to query the field trial state first, to ensure that |
71 // UMA reports the correct group. | 71 // UMA reports the correct group. |
72 const std::string group_name = base::FieldTrialList::FindFullName("IconNTP"); | 72 const std::string group_name = base::FieldTrialList::FindFullName("IconNTP"); |
73 using base::CommandLine; | 73 using base::CommandLine; |
74 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableIconNtp)) | 74 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableIconNtp)) |
75 return false; | 75 return false; |
76 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableIconNtp)) | 76 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableIconNtp)) |
77 return true; | 77 return true; |
78 | 78 |
79 return StartsWithASCII(group_name, "Enabled", true); | 79 return StartsWithASCII(group_name, "Enabled", true); |
80 } | 80 } |
81 | 81 |
82 // Converts string16 to V8 String. | 82 // Converts string16 to V8 String. |
83 v8::Handle<v8::String> UTF16ToV8String(v8::Isolate* isolate, | 83 v8::Local<v8::String> UTF16ToV8String(v8::Isolate* isolate, |
84 const base::string16& s) { | 84 const base::string16& s) { |
85 return v8::String::NewFromTwoByte(isolate, | 85 return v8::String::NewFromTwoByte(isolate, |
86 reinterpret_cast<const uint16_t*>(s.data()), | 86 reinterpret_cast<const uint16_t*>(s.data()), |
87 v8::String::kNormalString, | 87 v8::String::kNormalString, |
88 s.size()); | 88 s.size()); |
89 } | 89 } |
90 | 90 |
91 // Converts std::string to V8 String. | 91 // Converts std::string to V8 String. |
92 v8::Handle<v8::String> UTF8ToV8String(v8::Isolate* isolate, | 92 v8::Local<v8::String> UTF8ToV8String(v8::Isolate* isolate, |
93 const std::string& s) { | 93 const std::string& s) { |
94 return v8::String::NewFromUtf8( | 94 return v8::String::NewFromUtf8( |
95 isolate, s.data(), v8::String::kNormalString, s.size()); | 95 isolate, s.data(), v8::String::kNormalString, s.size()); |
96 } | 96 } |
97 | 97 |
98 // Throws a TypeError on the current V8 context if the args are invalid. | 98 // Throws a TypeError on the current V8 context if the args are invalid. |
99 void ThrowInvalidParameters(const v8::FunctionCallbackInfo<v8::Value>& args) { | 99 void ThrowInvalidParameters(const v8::FunctionCallbackInfo<v8::Value>& args) { |
100 v8::Isolate* isolate = args.GetIsolate(); | 100 v8::Isolate* isolate = args.GetIsolate(); |
101 isolate->ThrowException(v8::Exception::TypeError( | 101 isolate->ThrowException(v8::Exception::TypeError( |
102 v8::String::NewFromUtf8(isolate, "Invalid parameters"))); | 102 v8::String::NewFromUtf8(isolate, "Invalid parameters"))); |
103 } | 103 } |
104 | 104 |
105 void Dispatch(blink::WebFrame* frame, const blink::WebString& script) { | 105 void Dispatch(blink::WebFrame* frame, const blink::WebString& script) { |
106 if (!frame) return; | 106 if (!frame) return; |
107 frame->executeScript(blink::WebScriptSource(script)); | 107 frame->executeScript(blink::WebScriptSource(script)); |
108 } | 108 } |
109 | 109 |
110 v8::Handle<v8::String> GenerateThumbnailURL( | 110 v8::Local<v8::String> GenerateThumbnailURL( |
111 v8::Isolate* isolate, | 111 v8::Isolate* isolate, |
112 int render_view_id, | 112 int render_view_id, |
113 InstantRestrictedID most_visited_item_id) { | 113 InstantRestrictedID most_visited_item_id) { |
114 return UTF8ToV8String( | 114 return UTF8ToV8String( |
115 isolate, | 115 isolate, |
116 base::StringPrintf( | 116 base::StringPrintf( |
117 "chrome-search://thumb/%d/%d", render_view_id, most_visited_item_id)); | 117 "chrome-search://thumb/%d/%d", render_view_id, most_visited_item_id)); |
118 } | 118 } |
119 | 119 |
120 // Populates a Javascript MostVisitedItem object from |mv_item|. | 120 // Populates a Javascript MostVisitedItem object from |mv_item|. |
121 // NOTE: Includes "url", "title" and "domain" which are private data, so should | 121 // NOTE: Includes "url", "title" and "domain" which are private data, so should |
122 // not be returned to the Instant page. These should be erased before returning | 122 // not be returned to the Instant page. These should be erased before returning |
123 // the object. See GetMostVisitedItemsWrapper() in searchbox_api.js. | 123 // the object. See GetMostVisitedItemsWrapper() in searchbox_api.js. |
124 v8::Handle<v8::Object> GenerateMostVisitedItem( | 124 v8::Local<v8::Object> GenerateMostVisitedItem( |
125 v8::Isolate* isolate, | 125 v8::Isolate* isolate, |
126 int render_view_id, | 126 int render_view_id, |
127 InstantRestrictedID restricted_id, | 127 InstantRestrictedID restricted_id, |
128 const InstantMostVisitedItem& mv_item) { | 128 const InstantMostVisitedItem& mv_item) { |
129 // We set the "dir" attribute of the title, so that in RTL locales, a LTR | 129 // We set the "dir" attribute of the title, so that in RTL locales, a LTR |
130 // title is rendered left-to-right and truncated from the right. For | 130 // title is rendered left-to-right and truncated from the right. For |
131 // example, the title of http://msdn.microsoft.com/en-us/default.aspx is | 131 // example, the title of http://msdn.microsoft.com/en-us/default.aspx is |
132 // "MSDN: Microsoft developer network". In RTL locales, in the New Tab | 132 // "MSDN: Microsoft developer network". In RTL locales, in the New Tab |
133 // page, if the "dir" of this title is not specified, it takes Chrome UI's | 133 // page, if the "dir" of this title is not specified, it takes Chrome UI's |
134 // directionality. So the title will be truncated as "soft developer | 134 // directionality. So the title will be truncated as "soft developer |
135 // network". Setting the "dir" attribute as "ltr" renders the truncated | 135 // network". Setting the "dir" attribute as "ltr" renders the truncated |
136 // title as "MSDN: Microsoft D...". As another example, the title of | 136 // title as "MSDN: Microsoft D...". As another example, the title of |
137 // http://yahoo.com is "Yahoo!". In RTL locales, in the New Tab page, the | 137 // http://yahoo.com is "Yahoo!". In RTL locales, in the New Tab page, the |
138 // title will be rendered as "!Yahoo" if its "dir" attribute is not set to | 138 // title will be rendered as "!Yahoo" if its "dir" attribute is not set to |
139 // "ltr". | 139 // "ltr". |
140 std::string direction; | 140 std::string direction; |
141 if (base::i18n::StringContainsStrongRTLChars(mv_item.title)) | 141 if (base::i18n::StringContainsStrongRTLChars(mv_item.title)) |
142 direction = kRTLHtmlTextDirection; | 142 direction = kRTLHtmlTextDirection; |
143 else | 143 else |
144 direction = kLTRHtmlTextDirection; | 144 direction = kLTRHtmlTextDirection; |
145 | 145 |
146 base::string16 title = mv_item.title; | 146 base::string16 title = mv_item.title; |
147 if (title.empty()) | 147 if (title.empty()) |
148 title = base::UTF8ToUTF16(mv_item.url.spec()); | 148 title = base::UTF8ToUTF16(mv_item.url.spec()); |
149 | 149 |
150 v8::Handle<v8::Object> obj = v8::Object::New(isolate); | 150 v8::Local<v8::Object> obj = v8::Object::New(isolate); |
151 obj->Set(v8::String::NewFromUtf8(isolate, "renderViewId"), | 151 obj->Set(v8::String::NewFromUtf8(isolate, "renderViewId"), |
152 v8::Int32::New(isolate, render_view_id)); | 152 v8::Int32::New(isolate, render_view_id)); |
153 obj->Set(v8::String::NewFromUtf8(isolate, "rid"), | 153 obj->Set(v8::String::NewFromUtf8(isolate, "rid"), |
154 v8::Int32::New(isolate, restricted_id)); | 154 v8::Int32::New(isolate, restricted_id)); |
155 obj->Set(v8::String::NewFromUtf8(isolate, "thumbnailUrl"), | 155 obj->Set(v8::String::NewFromUtf8(isolate, "thumbnailUrl"), |
156 GenerateThumbnailURL(isolate, render_view_id, restricted_id)); | 156 GenerateThumbnailURL(isolate, render_view_id, restricted_id)); |
157 if (IsIconNTPEnabled()) { | 157 if (IsIconNTPEnabled()) { |
158 // Update website http://www.chromium.org/embeddedsearch when we make this | 158 // Update website http://www.chromium.org/embeddedsearch when we make this |
159 // permanent. | 159 // permanent. |
160 // Large icon size is 48px * window.devicePixelRatio. This is easier to set | 160 // Large icon size is 48px * window.devicePixelRatio. This is easier to set |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 GURL GetCurrentURL(content::RenderView* render_view) { | 203 GURL GetCurrentURL(content::RenderView* render_view) { |
204 blink::WebView* webview = render_view->GetWebView(); | 204 blink::WebView* webview = render_view->GetWebView(); |
205 return webview ? GURL(webview->mainFrame()->document().url()) : GURL(); | 205 return webview ? GURL(webview->mainFrame()->document().url()) : GURL(); |
206 } | 206 } |
207 | 207 |
208 } // namespace | 208 } // namespace |
209 | 209 |
210 namespace internal { // for testing. | 210 namespace internal { // for testing. |
211 | 211 |
212 // Returns an array with the RGBA color components. | 212 // Returns an array with the RGBA color components. |
213 v8::Handle<v8::Value> RGBAColorToArray(v8::Isolate* isolate, | 213 v8::Local<v8::Value> RGBAColorToArray(v8::Isolate* isolate, |
214 const RGBAColor& color) { | 214 const RGBAColor& color) { |
215 v8::Handle<v8::Array> color_array = v8::Array::New(isolate, 4); | 215 v8::Local<v8::Array> color_array = v8::Array::New(isolate, 4); |
216 color_array->Set(0, v8::Int32::New(isolate, color.r)); | 216 color_array->Set(0, v8::Int32::New(isolate, color.r)); |
217 color_array->Set(1, v8::Int32::New(isolate, color.g)); | 217 color_array->Set(1, v8::Int32::New(isolate, color.g)); |
218 color_array->Set(2, v8::Int32::New(isolate, color.b)); | 218 color_array->Set(2, v8::Int32::New(isolate, color.b)); |
219 color_array->Set(3, v8::Int32::New(isolate, color.a)); | 219 color_array->Set(3, v8::Int32::New(isolate, color.a)); |
220 return color_array; | 220 return color_array; |
221 } | 221 } |
222 | 222 |
223 // Resolves a possibly relative URL using the current URL. | 223 // Resolves a possibly relative URL using the current URL. |
224 GURL ResolveURL(const GURL& current_url, | 224 GURL ResolveURL(const GURL& current_url, |
225 const base::string16& possibly_relative_url) { | 225 const base::string16& possibly_relative_url) { |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 "}"; | 380 "}"; |
381 | 381 |
382 // ---------------------------------------------------------------------------- | 382 // ---------------------------------------------------------------------------- |
383 | 383 |
384 class SearchBoxExtensionWrapper : public v8::Extension { | 384 class SearchBoxExtensionWrapper : public v8::Extension { |
385 public: | 385 public: |
386 explicit SearchBoxExtensionWrapper(const base::StringPiece& code); | 386 explicit SearchBoxExtensionWrapper(const base::StringPiece& code); |
387 | 387 |
388 // Allows v8's javascript code to call the native functions defined | 388 // Allows v8's javascript code to call the native functions defined |
389 // in this class for window.chrome. | 389 // in this class for window.chrome. |
390 v8::Handle<v8::FunctionTemplate> GetNativeFunctionTemplate( | 390 v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate( |
391 v8::Isolate*, | 391 v8::Isolate*, |
392 v8::Handle<v8::String> name) override; | 392 v8::Local<v8::String> name) override; |
393 | 393 |
394 // Helper function to find the RenderView. May return NULL. | 394 // Helper function to find the RenderView. May return NULL. |
395 static content::RenderView* GetRenderView(); | 395 static content::RenderView* GetRenderView(); |
396 | 396 |
397 // Sends a Chrome identity check to the browser. | 397 // Sends a Chrome identity check to the browser. |
398 static void CheckIsUserSignedInToChromeAs( | 398 static void CheckIsUserSignedInToChromeAs( |
399 const v8::FunctionCallbackInfo<v8::Value>& args); | 399 const v8::FunctionCallbackInfo<v8::Value>& args); |
400 | 400 |
401 // Checks whether the user sync his history. | 401 // Checks whether the user sync his history. |
402 static void CheckIsUserSyncingHistory( | 402 static void CheckIsUserSyncingHistory( |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 // static | 510 // static |
511 v8::Extension* SearchBoxExtension::Get() { | 511 v8::Extension* SearchBoxExtension::Get() { |
512 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). | 512 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). |
513 GetRawDataResource(IDR_SEARCHBOX_API)); | 513 GetRawDataResource(IDR_SEARCHBOX_API)); |
514 } | 514 } |
515 | 515 |
516 // static | 516 // static |
517 bool SearchBoxExtension::PageSupportsInstant(blink::WebFrame* frame) { | 517 bool SearchBoxExtension::PageSupportsInstant(blink::WebFrame* frame) { |
518 if (!frame) return false; | 518 if (!frame) return false; |
519 v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); | 519 v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); |
520 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( | 520 v8::Local<v8::Value> v = frame->executeScriptAndReturnValue( |
521 blink::WebScriptSource(kSupportsInstantScript)); | 521 blink::WebScriptSource(kSupportsInstantScript)); |
522 return !v.IsEmpty() && v->BooleanValue(); | 522 return !v.IsEmpty() && v->BooleanValue(); |
523 } | 523 } |
524 | 524 |
525 // static | 525 // static |
526 void SearchBoxExtension::DispatchChromeIdentityCheckResult( | 526 void SearchBoxExtension::DispatchChromeIdentityCheckResult( |
527 blink::WebFrame* frame, | 527 blink::WebFrame* frame, |
528 const base::string16& identity, | 528 const base::string16& identity, |
529 bool identity_match) { | 529 bool identity_match) { |
530 std::string escaped_identity = base::GetQuotedJSONString(identity); | 530 std::string escaped_identity = base::GetQuotedJSONString(identity); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 void SearchBoxExtension::DispatchToggleVoiceSearch( | 595 void SearchBoxExtension::DispatchToggleVoiceSearch( |
596 blink::WebFrame* frame) { | 596 blink::WebFrame* frame) { |
597 Dispatch(frame, kDispatchToggleVoiceSearchScript); | 597 Dispatch(frame, kDispatchToggleVoiceSearchScript); |
598 } | 598 } |
599 | 599 |
600 SearchBoxExtensionWrapper::SearchBoxExtensionWrapper( | 600 SearchBoxExtensionWrapper::SearchBoxExtensionWrapper( |
601 const base::StringPiece& code) | 601 const base::StringPiece& code) |
602 : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) { | 602 : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) { |
603 } | 603 } |
604 | 604 |
605 v8::Handle<v8::FunctionTemplate> | 605 v8::Local<v8::FunctionTemplate> |
606 SearchBoxExtensionWrapper::GetNativeFunctionTemplate( | 606 SearchBoxExtensionWrapper::GetNativeFunctionTemplate( |
607 v8::Isolate* isolate, | 607 v8::Isolate* isolate, |
608 v8::Handle<v8::String> name) { | 608 v8::Local<v8::String> name) { |
609 if (name->Equals( | 609 if (name->Equals( |
610 v8::String::NewFromUtf8(isolate, "CheckIsUserSignedInToChromeAs"))) | 610 v8::String::NewFromUtf8(isolate, "CheckIsUserSignedInToChromeAs"))) |
611 return v8::FunctionTemplate::New(isolate, CheckIsUserSignedInToChromeAs); | 611 return v8::FunctionTemplate::New(isolate, CheckIsUserSignedInToChromeAs); |
612 if (name->Equals( | 612 if (name->Equals( |
613 v8::String::NewFromUtf8(isolate, "CheckIsUserSyncingHistory"))) | 613 v8::String::NewFromUtf8(isolate, "CheckIsUserSyncingHistory"))) |
614 return v8::FunctionTemplate::New(isolate, CheckIsUserSyncingHistory); | 614 return v8::FunctionTemplate::New(isolate, CheckIsUserSyncingHistory); |
615 if (name->Equals(v8::String::NewFromUtf8(isolate, "DeleteMostVisitedItem"))) | 615 if (name->Equals(v8::String::NewFromUtf8(isolate, "DeleteMostVisitedItem"))) |
616 return v8::FunctionTemplate::New(isolate, DeleteMostVisitedItem); | 616 return v8::FunctionTemplate::New(isolate, DeleteMostVisitedItem); |
617 if (name->Equals(v8::String::NewFromUtf8(isolate, "Focus"))) | 617 if (name->Equals(v8::String::NewFromUtf8(isolate, "Focus"))) |
618 return v8::FunctionTemplate::New(isolate, Focus); | 618 return v8::FunctionTemplate::New(isolate, Focus); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 if (name->Equals(v8::String::NewFromUtf8(isolate, "StopCapturingKeyStrokes"))) | 664 if (name->Equals(v8::String::NewFromUtf8(isolate, "StopCapturingKeyStrokes"))) |
665 return v8::FunctionTemplate::New(isolate, StopCapturingKeyStrokes); | 665 return v8::FunctionTemplate::New(isolate, StopCapturingKeyStrokes); |
666 if (name->Equals( | 666 if (name->Equals( |
667 v8::String::NewFromUtf8(isolate, "UndoAllMostVisitedDeletions"))) | 667 v8::String::NewFromUtf8(isolate, "UndoAllMostVisitedDeletions"))) |
668 return v8::FunctionTemplate::New(isolate, UndoAllMostVisitedDeletions); | 668 return v8::FunctionTemplate::New(isolate, UndoAllMostVisitedDeletions); |
669 if (name->Equals(v8::String::NewFromUtf8(isolate, "UndoMostVisitedDeletion"))) | 669 if (name->Equals(v8::String::NewFromUtf8(isolate, "UndoMostVisitedDeletion"))) |
670 return v8::FunctionTemplate::New(isolate, UndoMostVisitedDeletion); | 670 return v8::FunctionTemplate::New(isolate, UndoMostVisitedDeletion); |
671 if (name->Equals( | 671 if (name->Equals( |
672 v8::String::NewFromUtf8(isolate, "GetDisplayInstantResults"))) | 672 v8::String::NewFromUtf8(isolate, "GetDisplayInstantResults"))) |
673 return v8::FunctionTemplate::New(isolate, GetDisplayInstantResults); | 673 return v8::FunctionTemplate::New(isolate, GetDisplayInstantResults); |
674 return v8::Handle<v8::FunctionTemplate>(); | 674 return v8::Local<v8::FunctionTemplate>(); |
675 } | 675 } |
676 | 676 |
677 // static | 677 // static |
678 content::RenderView* SearchBoxExtensionWrapper::GetRenderView() { | 678 content::RenderView* SearchBoxExtensionWrapper::GetRenderView() { |
679 blink::WebLocalFrame* webframe = | 679 blink::WebLocalFrame* webframe = |
680 blink::WebLocalFrame::frameForCurrentContext(); | 680 blink::WebLocalFrame::frameForCurrentContext(); |
681 if (!webframe) return NULL; | 681 if (!webframe) return NULL; |
682 | 682 |
683 blink::WebView* webview = webframe->view(); | 683 blink::WebView* webview = webframe->view(); |
684 if (!webview) return NULL; // can happen during closing | 684 if (!webview) return NULL; // can happen during closing |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 content::RenderView* render_view = GetRenderView(); | 782 content::RenderView* render_view = GetRenderView(); |
783 if (!render_view) | 783 if (!render_view) |
784 return; | 784 return; |
785 DVLOG(1) << render_view << " GetMostVisitedItems"; | 785 DVLOG(1) << render_view << " GetMostVisitedItems"; |
786 | 786 |
787 const SearchBox* search_box = SearchBox::Get(render_view); | 787 const SearchBox* search_box = SearchBox::Get(render_view); |
788 | 788 |
789 std::vector<InstantMostVisitedItemIDPair> instant_mv_items; | 789 std::vector<InstantMostVisitedItemIDPair> instant_mv_items; |
790 search_box->GetMostVisitedItems(&instant_mv_items); | 790 search_box->GetMostVisitedItems(&instant_mv_items); |
791 v8::Isolate* isolate = args.GetIsolate(); | 791 v8::Isolate* isolate = args.GetIsolate(); |
792 v8::Handle<v8::Array> v8_mv_items = | 792 v8::Local<v8::Array> v8_mv_items = |
793 v8::Array::New(isolate, instant_mv_items.size()); | 793 v8::Array::New(isolate, instant_mv_items.size()); |
794 for (size_t i = 0; i < instant_mv_items.size(); ++i) { | 794 for (size_t i = 0; i < instant_mv_items.size(); ++i) { |
795 v8_mv_items->Set(i, | 795 v8_mv_items->Set(i, |
796 GenerateMostVisitedItem(isolate, | 796 GenerateMostVisitedItem(isolate, |
797 render_view->GetRoutingID(), | 797 render_view->GetRoutingID(), |
798 instant_mv_items[i].first, | 798 instant_mv_items[i].first, |
799 instant_mv_items[i].second)); | 799 instant_mv_items[i].second)); |
800 } | 800 } |
801 args.GetReturnValue().Set(v8_mv_items); | 801 args.GetReturnValue().Set(v8_mv_items); |
802 } | 802 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
845 | 845 |
846 // static | 846 // static |
847 void SearchBoxExtensionWrapper::GetSearchRequestParams( | 847 void SearchBoxExtensionWrapper::GetSearchRequestParams( |
848 const v8::FunctionCallbackInfo<v8::Value>& args) { | 848 const v8::FunctionCallbackInfo<v8::Value>& args) { |
849 content::RenderView* render_view = GetRenderView(); | 849 content::RenderView* render_view = GetRenderView(); |
850 if (!render_view) return; | 850 if (!render_view) return; |
851 | 851 |
852 const EmbeddedSearchRequestParams& params = | 852 const EmbeddedSearchRequestParams& params = |
853 SearchBox::Get(render_view)->GetEmbeddedSearchRequestParams(); | 853 SearchBox::Get(render_view)->GetEmbeddedSearchRequestParams(); |
854 v8::Isolate* isolate = args.GetIsolate(); | 854 v8::Isolate* isolate = args.GetIsolate(); |
855 v8::Handle<v8::Object> data = v8::Object::New(isolate); | 855 v8::Local<v8::Object> data = v8::Object::New(isolate); |
856 if (!params.search_query.empty()) { | 856 if (!params.search_query.empty()) { |
857 data->Set(v8::String::NewFromUtf8(isolate, kSearchQueryKey), | 857 data->Set(v8::String::NewFromUtf8(isolate, kSearchQueryKey), |
858 UTF16ToV8String(isolate, params.search_query)); | 858 UTF16ToV8String(isolate, params.search_query)); |
859 } | 859 } |
860 if (!params.original_query.empty()) { | 860 if (!params.original_query.empty()) { |
861 data->Set(v8::String::NewFromUtf8(isolate, kOriginalQueryKey), | 861 data->Set(v8::String::NewFromUtf8(isolate, kOriginalQueryKey), |
862 UTF16ToV8String(isolate, params.original_query)); | 862 UTF16ToV8String(isolate, params.original_query)); |
863 } | 863 } |
864 if (!params.rlz_parameter_value.empty()) { | 864 if (!params.rlz_parameter_value.empty()) { |
865 data->Set(v8::String::NewFromUtf8(isolate, kRLZParameterKey), | 865 data->Set(v8::String::NewFromUtf8(isolate, kRLZParameterKey), |
(...skipping 21 matching lines...) Expand all Loading... |
887 | 887 |
888 // static | 888 // static |
889 void SearchBoxExtensionWrapper::GetSuggestionToPrefetch( | 889 void SearchBoxExtensionWrapper::GetSuggestionToPrefetch( |
890 const v8::FunctionCallbackInfo<v8::Value>& args) { | 890 const v8::FunctionCallbackInfo<v8::Value>& args) { |
891 content::RenderView* render_view = GetRenderView(); | 891 content::RenderView* render_view = GetRenderView(); |
892 if (!render_view) return; | 892 if (!render_view) return; |
893 | 893 |
894 const InstantSuggestion& suggestion = | 894 const InstantSuggestion& suggestion = |
895 SearchBox::Get(render_view)->suggestion(); | 895 SearchBox::Get(render_view)->suggestion(); |
896 v8::Isolate* isolate = args.GetIsolate(); | 896 v8::Isolate* isolate = args.GetIsolate(); |
897 v8::Handle<v8::Object> data = v8::Object::New(isolate); | 897 v8::Local<v8::Object> data = v8::Object::New(isolate); |
898 data->Set(v8::String::NewFromUtf8(isolate, "text"), | 898 data->Set(v8::String::NewFromUtf8(isolate, "text"), |
899 UTF16ToV8String(isolate, suggestion.text)); | 899 UTF16ToV8String(isolate, suggestion.text)); |
900 data->Set(v8::String::NewFromUtf8(isolate, "metadata"), | 900 data->Set(v8::String::NewFromUtf8(isolate, "metadata"), |
901 UTF8ToV8String(isolate, suggestion.metadata)); | 901 UTF8ToV8String(isolate, suggestion.metadata)); |
902 args.GetReturnValue().Set(data); | 902 args.GetReturnValue().Set(data); |
903 } | 903 } |
904 | 904 |
905 // static | 905 // static |
906 void SearchBoxExtensionWrapper::GetThemeBackgroundInfo( | 906 void SearchBoxExtensionWrapper::GetThemeBackgroundInfo( |
907 const v8::FunctionCallbackInfo<v8::Value>& args) { | 907 const v8::FunctionCallbackInfo<v8::Value>& args) { |
908 content::RenderView* render_view = GetRenderView(); | 908 content::RenderView* render_view = GetRenderView(); |
909 if (!render_view) return; | 909 if (!render_view) return; |
910 | 910 |
911 DVLOG(1) << render_view << " GetThemeBackgroundInfo"; | 911 DVLOG(1) << render_view << " GetThemeBackgroundInfo"; |
912 const ThemeBackgroundInfo& theme_info = | 912 const ThemeBackgroundInfo& theme_info = |
913 SearchBox::Get(render_view)->GetThemeBackgroundInfo(); | 913 SearchBox::Get(render_view)->GetThemeBackgroundInfo(); |
914 v8::Isolate* isolate = args.GetIsolate(); | 914 v8::Isolate* isolate = args.GetIsolate(); |
915 v8::Handle<v8::Object> info = v8::Object::New(isolate); | 915 v8::Local<v8::Object> info = v8::Object::New(isolate); |
916 | 916 |
917 info->Set(v8::String::NewFromUtf8(isolate, "usingDefaultTheme"), | 917 info->Set(v8::String::NewFromUtf8(isolate, "usingDefaultTheme"), |
918 v8::Boolean::New(isolate, theme_info.using_default_theme)); | 918 v8::Boolean::New(isolate, theme_info.using_default_theme)); |
919 | 919 |
920 // The theme background color is in RGBA format "rgba(R,G,B,A)" where R, G and | 920 // The theme background color is in RGBA format "rgba(R,G,B,A)" where R, G and |
921 // B are between 0 and 255 inclusive, and A is a double between 0 and 1 | 921 // B are between 0 and 255 inclusive, and A is a double between 0 and 1 |
922 // inclusive. | 922 // inclusive. |
923 // This is the CSS "background-color" format. | 923 // This is the CSS "background-color" format. |
924 // Value is always valid. | 924 // Value is always valid. |
925 // TODO(jfweitz): Remove this field after GWS is modified to use the new | 925 // TODO(jfweitz): Remove this field after GWS is modified to use the new |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1273 if (!render_view) return; | 1273 if (!render_view) return; |
1274 | 1274 |
1275 bool display_instant_results = | 1275 bool display_instant_results = |
1276 SearchBox::Get(render_view)->display_instant_results(); | 1276 SearchBox::Get(render_view)->display_instant_results(); |
1277 DVLOG(1) << render_view << " GetDisplayInstantResults" << | 1277 DVLOG(1) << render_view << " GetDisplayInstantResults" << |
1278 display_instant_results; | 1278 display_instant_results; |
1279 args.GetReturnValue().Set(display_instant_results); | 1279 args.GetReturnValue().Set(display_instant_results); |
1280 } | 1280 } |
1281 | 1281 |
1282 } // namespace extensions_v8 | 1282 } // namespace extensions_v8 |
OLD | NEW |