Chromium Code Reviews| Index: chrome/renderer/searchbox/searchbox_extension.cc |
| diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc |
| index fda479fd0dc34ecd86de4967381243c981bda1b2..cdc7641150c385111d39e5fd58804cbbedaacb00 100644 |
| --- a/chrome/renderer/searchbox/searchbox_extension.cc |
| +++ b/chrome/renderer/searchbox/searchbox_extension.cc |
| @@ -6,6 +6,7 @@ |
| #include <ctype.h> |
| +#include "base/i18n/rtl.h" |
| #include "base/string_number_conversions.h" |
| #include "base/stringprintf.h" |
| #include "base/utf_string_conversions.h" |
| @@ -147,6 +148,15 @@ static const char kDispatchContextChangeEventScript[] = |
| " true;" |
| "}"; |
| +static const char kDispatchMarginChangeEventScript[] = |
| + "if (window.chrome &&" |
| + " window.chrome.searchBox &&" |
| + " window.chrome.searchBox.onmarginchange &&" |
| + " typeof window.chrome.searchBox.onmarginchange == 'function') {" |
| + " window.chrome.searchBox.onmarginchange();" |
| + " true;" |
| + "}"; |
| + |
| // ---------------------------------------------------------------------------- |
| class SearchBoxExtensionWrapper : public v8::Extension { |
| @@ -189,6 +199,17 @@ class SearchBoxExtensionWrapper : public v8::Extension { |
| // Gets the height of the region of the search box that overlaps the window. |
| static v8::Handle<v8::Value> GetHeight(const v8::Arguments& args); |
| + // Gets the width of the margin from the start of the page to the start of |
| + // the suggestions dropdown. |
| + static v8::Handle<v8::Value> GetStartMargin(const v8::Arguments& args); |
| + |
| + // Gets the width of the margin from the start of the page to the end of |
| + // the suggestions dropdown. |
| + static v8::Handle<v8::Value> GetEndMargin(const v8::Arguments& args); |
| + |
| + // Returns true if the Searchbox itself is oriented right-to-left. |
| + static v8::Handle<v8::Value> GetRightToLeft(const v8::Arguments& args); |
| + |
| // Gets the autocomplete results from search box. |
| static v8::Handle<v8::Value> GetAutocompleteResults( |
| const v8::Arguments& args); |
| @@ -255,6 +276,12 @@ v8::Handle<v8::FunctionTemplate> SearchBoxExtensionWrapper::GetNativeFunction( |
| return v8::FunctionTemplate::New(GetWidth); |
| } else if (name->Equals(v8::String::New("GetHeight"))) { |
| return v8::FunctionTemplate::New(GetHeight); |
| + } else if (name->Equals(v8::String::New("GetStartMargin"))) { |
| + return v8::FunctionTemplate::New(GetStartMargin); |
| + } else if (name->Equals(v8::String::New("GetEndMargin"))) { |
| + return v8::FunctionTemplate::New(GetEndMargin); |
| + } else if (name->Equals(v8::String::New("GetRightToLeft"))) { |
| + return v8::FunctionTemplate::New(GetRightToLeft); |
| } else if (name->Equals(v8::String::New("GetAutocompleteResults"))) { |
| return v8::FunctionTemplate::New(GetAutocompleteResults); |
| } else if (name->Equals(v8::String::New("GetIsFocused"))) { |
| @@ -330,7 +357,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()); |
| + return v8::Int32::New(SearchBox::Get(render_view)->GetPopupBounds().x()); |
| } |
| // static |
| @@ -338,7 +365,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()); |
| + return v8::Int32::New(SearchBox::Get(render_view)->GetPopupBounds().y()); |
| } |
| // static |
| @@ -346,7 +373,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()); |
| + return v8::Int32::New(SearchBox::Get(render_view)->GetPopupBounds().width()); |
| } |
| // static |
| @@ -354,7 +381,29 @@ 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()); |
| + return v8::Int32::New(SearchBox::Get(render_view)->GetPopupBounds().height()); |
| +} |
| + |
| +// static |
| +v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetStartMargin( |
| + const v8::Arguments& args) { |
| + content::RenderView* render_view = GetRenderView(); |
| + if (!render_view) return v8::Undefined(); |
| + return v8::Int32::New(SearchBox::Get(render_view)->GetStartMargin()); |
| +} |
| + |
| +// static |
| +v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetEndMargin( |
| + const v8::Arguments& args) { |
| + content::RenderView* render_view = GetRenderView(); |
| + if (!render_view) return v8::Undefined(); |
| + return v8::Int32::New(SearchBox::Get(render_view)->GetEndMargin()); |
| +} |
| + |
| +// static |
| +v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetRightToLeft( |
| + const v8::Arguments& args) { |
| + return v8::Boolean::New(base::i18n::IsRTL()); |
|
samarth
2012/11/16 22:08:26
Can IsRTL change while Chrome is running?
melevin
2012/11/16 22:34:43
It's not impossible but I think would be extremely
|
| } |
| // static |
| @@ -710,6 +759,11 @@ void SearchBoxExtension::DispatchContextChange(WebKit::WebFrame* frame) { |
| } |
| // static |
| +void SearchBoxExtension::DispatchMarginChange(WebKit::WebFrame* frame) { |
| + Dispatch(frame, kDispatchMarginChangeEventScript); |
| +} |
| + |
| +// static |
| bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { |
| if (!frame) return false; |