From e4a379c539f36c95df21e45d1f0c045604f4404c Mon Sep 17 00:00:00 2001 From: "kuan@chromium.org" Date: Fri, 15 Feb 2013 19:27:19 +0000 Subject: alternate ntp: multiple theme-related fixes on ntp - fix mis-aligned theme image with unpinned bookmark bar: both bmb and ntp page need to share a top-aligned theme image seamlessly - remove expensive op of informing gws of content area height change, which is no longer needed now that ntp is full-gws. BUG=176280,169481 TEST=verify per bug rpt Review URL: https://chromiumcodereview.appspot.com/12252040 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182781 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/instant/instant_controller.cc | 16 +------ chrome/browser/instant/instant_controller.h | 3 -- chrome/browser/instant/instant_page.cc | 4 -- chrome/browser/instant/instant_page.h | 3 -- chrome/browser/ui/browser.cc | 5 ++ chrome/browser/ui/browser_instant_controller.cc | 54 ++++++++-------------- chrome/browser/ui/browser_instant_controller.h | 14 ++---- chrome/browser/ui/views/frame/browser_view.cc | 8 ---- chrome/common/instant_types.cc | 1 + chrome/common/instant_types.h | 4 ++ chrome/common/render_messages.h | 4 +- .../renderer/resources/extensions/searchbox_api.js | 3 -- chrome/renderer/searchbox/searchbox.cc | 16 ------- chrome/renderer/searchbox/searchbox.h | 2 - chrome/renderer/searchbox/searchbox_extension.cc | 46 +++--------------- chrome/renderer/searchbox/searchbox_extension.h | 1 - 16 files changed, 41 insertions(+), 143 deletions(-) (limited to 'chrome') diff --git a/chrome/browser/instant/instant_controller.cc b/chrome/browser/instant/instant_controller.cc index 1f25d3d..c879f60 100644 --- a/chrome/browser/instant/instant_controller.cc +++ b/chrome/browser/instant/instant_controller.cc @@ -805,18 +805,6 @@ void InstantController::ThemeChanged(const ThemeBackgroundInfo& theme_info) { instant_tab_->SendThemeBackgroundInfo(theme_info); } -void InstantController::ThemeAreaHeightChanged(int height) { - if (!extended_enabled_) - return; - - if (overlay_) - overlay_->SendThemeAreaHeight(height); - if (ntp_) - ntp_->SendThemeAreaHeight(height); - if (instant_tab_) - instant_tab_->SendThemeAreaHeight(height); -} - void InstantController::SwappedOverlayContents() { model_.SetPreviewContents(GetPreviewContents()); } @@ -864,7 +852,7 @@ void InstantController::InstantPageRenderViewCreated( return; // Update theme info so that the page picks it up. - browser_->UpdateThemeInfoForPreview(); + browser_->UpdateThemeInfo(false); // Ensure the searchbox API has the correct initial state. if (IsContentsFrom(overlay(), contents)) { @@ -1181,7 +1169,7 @@ void InstantController::ResetInstantTab() { instant_tab_.reset(new InstantTab(this)); instant_tab_->Init(active_tab); // Update theme info for this tab. - browser_->UpdateThemeInfoForPreview(); + browser_->UpdateThemeInfo(false); instant_tab_->SetDisplayInstantResults(instant_enabled_); instant_tab_->SetMarginSize(start_margin_, end_margin_); instant_tab_->InitializeFonts(); diff --git a/chrome/browser/instant/instant_controller.h b/chrome/browser/instant/instant_controller.h index 98c691f..e6abd1a 100644 --- a/chrome/browser/instant/instant_controller.h +++ b/chrome/browser/instant/instant_controller.h @@ -153,9 +153,6 @@ class InstantController : public InstantPage::Delegate { // The theme has changed. Pass the message to the preview page. void ThemeChanged(const ThemeBackgroundInfo& theme_info); - // The theme area height has changed. Pass the message to the preview page. - void ThemeAreaHeightChanged(int height); - // Called when someone else swapped in a different contents in the |overlay_|. void SwappedOverlayContents(); diff --git a/chrome/browser/instant/instant_page.cc b/chrome/browser/instant/instant_page.cc index 8463eb8..a82a9c6 100644 --- a/chrome/browser/instant/instant_page.cc +++ b/chrome/browser/instant/instant_page.cc @@ -77,10 +77,6 @@ void InstantPage::SendThemeBackgroundInfo( Send(new ChromeViewMsg_SearchBoxThemeChanged(routing_id(), theme_info)); } -void InstantPage::SendThemeAreaHeight(int height) { - Send(new ChromeViewMsg_SearchBoxThemeAreaHeightChanged(routing_id(), height)); -} - void InstantPage::SetDisplayInstantResults(bool display_instant_results) { Send(new ChromeViewMsg_SearchBoxSetDisplayInstantResults( routing_id(), display_instant_results)); diff --git a/chrome/browser/instant/instant_page.h b/chrome/browser/instant/instant_page.h index 2a02262..2256524 100644 --- a/chrome/browser/instant/instant_page.h +++ b/chrome/browser/instant/instant_page.h @@ -149,9 +149,6 @@ class InstantPage : public content::WebContentsObserver { // Tells the page about the current theme background. void SendThemeBackgroundInfo(const ThemeBackgroundInfo& theme_info); - // Tells the page about the current theme area height. - void SendThemeAreaHeight(int height); - // Tells the page whether it is allowed to display Instant results. void SetDisplayInstantResults(bool display_instant_results); diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 98afd97..dc2f63c 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc @@ -2175,6 +2175,11 @@ void Browser::UpdateBookmarkBarState(BookmarkBarStateChangeReason reason) { bookmark_bar_state_ = state; + // Inform NTP page of change in bookmark bar state, so that it can adjust the + // theme image top offset if necessary. + if (instant_controller_) + instant_controller_->UpdateThemeInfo(true); + if (!window_) return; // This is called from the constructor when window_ is NULL. diff --git a/chrome/browser/ui/browser_instant_controller.cc b/chrome/browser/ui/browser_instant_controller.cc index 14f0113..00493e2 100644 --- a/chrome/browser/ui/browser_instant_controller.cc +++ b/chrome/browser/ui/browser_instant_controller.cc @@ -10,6 +10,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/themes/theme_service.h" #include "chrome/browser/themes/theme_service_factory.h" +#include "chrome/browser/ui/bookmarks/bookmark_bar_constants.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/omnibox/location_bar.h" @@ -43,8 +44,7 @@ BrowserInstantController::BrowserInstantController(Browser* browser) instant_(ALLOW_THIS_IN_INITIALIZER_LIST(this), chrome::search::IsInstantExtendedAPIEnabled(profile())), instant_unload_handler_(browser), - initialized_theme_info_(false), - theme_area_height_(0) { + initialized_theme_info_(false) { profile_pref_registrar_.Init(profile()->GetPrefs()); profile_pref_registrar_.Add( GetInstantPrefName(profile()), @@ -208,15 +208,10 @@ void BrowserInstantController::TabDeactivated(content::WebContents* contents) { instant_.TabDeactivated(contents); } -void BrowserInstantController::SetContentHeight(int height) { - OnThemeAreaHeightChanged(height); -} - -void BrowserInstantController::UpdateThemeInfoForPreview() { - // Update theme background info and theme area height. - // Initialize |theme_info| if necessary. - // |OnThemeChanged| also updates theme area height if necessary. - if (!initialized_theme_info_) +void BrowserInstantController::UpdateThemeInfo(bool parse_theme_info) { + // Update theme background info. + // Initialize or re-parse |theme_info| if necessary. + if (!initialized_theme_info_ || parse_theme_info) OnThemeChanged(ThemeServiceFactory::GetForProfile(profile())); else OnThemeChanged(NULL); @@ -251,7 +246,7 @@ void BrowserInstantController::ModeChanged(const search::Mode& old_mode, const search::Mode& new_mode) { // If mode is now |NTP|, send theme-related information to instant. if (new_mode.is_ntp()) - UpdateThemeInfoForPreview(); + UpdateThemeInfo(false); instant_.SearchModeChanged(old_mode, new_mode); } @@ -301,12 +296,19 @@ void BrowserInstantController::OnThemeChanged(ThemeService* theme_service) { } // Set theme background image vertical alignment. - if (alignment & ThemeService::ALIGN_TOP) + if (alignment & ThemeService::ALIGN_TOP) { theme_info_.image_vertical_alignment = THEME_BKGRND_IMAGE_ALIGN_TOP; - else if (alignment & ThemeService::ALIGN_BOTTOM) +#if !defined(OS_ANDROID) + // A detached bookmark bar will draw the top part of a top-aligned theme + // image as its background, so offset the image by the bar height. + if (browser_->bookmark_bar_state() == BookmarkBar::DETACHED) + theme_info_.image_top_offset = -chrome::kNTPBookmarkBarHeight; +#endif // !defined(OS_ANDROID) + } else if (alignment & ThemeService::ALIGN_BOTTOM) { theme_info_.image_vertical_alignment = THEME_BKGRND_IMAGE_ALIGN_BOTTOM; - else // ALIGN_CENTER + } else { // ALIGN_CENTER theme_info_.image_vertical_alignment = THEME_BKGRND_IMAGE_ALIGN_CENTER; + } // Set theme background image tiling. int tiling = 0; @@ -339,28 +341,8 @@ void BrowserInstantController::OnThemeChanged(ThemeService* theme_service) { DCHECK(initialized_theme_info_); - if (browser_->search_model()->mode().is_ntp()) { + if (browser_->search_model()->mode().is_ntp()) instant_.ThemeChanged(theme_info_); - - // Theme area height is only sent to preview for non-top-aligned images; - // new theme may have a different alignment that requires preview to know - // theme area height. - OnThemeAreaHeightChanged(theme_area_height_); - } -} - -void BrowserInstantController::OnThemeAreaHeightChanged(int height) { - theme_area_height_ = height; - - // Notify preview only if mode is |NTP| and theme background image is not top- - // aligned; top-aligned images don't need theme area height to determine which - // part of the image overlay should draw, 'cos the origin is top-left. - if (!browser_->search_model()->mode().is_ntp() || - theme_info_.theme_id.empty() || - theme_info_.image_vertical_alignment == THEME_BKGRND_IMAGE_ALIGN_TOP) { - return; - } - instant_.ThemeAreaHeightChanged(theme_area_height_); } } // namespace chrome diff --git a/chrome/browser/ui/browser_instant_controller.h b/chrome/browser/ui/browser_instant_controller.h index 8a96910..e8702ef 100644 --- a/chrome/browser/ui/browser_instant_controller.h +++ b/chrome/browser/ui/browser_instant_controller.h @@ -96,13 +96,9 @@ class BrowserInstantController : public content::NotificationObserver, // Invoked by |browser_| when the active tab is about to be deactivated. void TabDeactivated(content::WebContents* contents); - // Invoked by |BrowserWindow| during layout to set content height which is - // used as theme area height, i.e. the height of the area that the entire - // theme background image should fill up. - void SetContentHeight(int height); - - // Invoked by |instant_| to update theme information for preview. - void UpdateThemeInfoForPreview(); + // Invoked by |instant_| or |browser_| to update theme information for NTP. + // Set |parse_theme_info| to true to force re-parsing of theme information. + void UpdateThemeInfo(bool parse_theme_info); // Invoked by the InstantController when it wants to open a URL. void OpenURLInCurrentTab(const GURL& url, content::PageTransition transition); @@ -127,9 +123,6 @@ class BrowserInstantController : public content::NotificationObserver, // Helper for handling theme change. void OnThemeChanged(ThemeService* theme_service); - // Helper for handling theme area height change. - void OnThemeAreaHeightChanged(int height); - // Replaces the contents at tab |index| with |new_contents| and deletes the // existing contents. void ReplaceWebContentsAt(int index, @@ -143,7 +136,6 @@ class BrowserInstantController : public content::NotificationObserver, // Theme-related data for NTP preview to adopt themes. bool initialized_theme_info_; // True if theme_info_ has been initialized. ThemeBackgroundInfo theme_info_; - int theme_area_height_; PrefChangeRegistrar profile_pref_registrar_; diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index 7fa4869..737268a 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -1806,18 +1806,10 @@ void BrowserView::Layout() { if (ignore_layout_) return; - int prev_content_height = contents_container_->height(); - views::View::Layout(); // The status bubble position requires that all other layout finish first. LayoutStatusBubble(); - - if (browser_->instant_controller() && - prev_content_height != contents_container_->height()) { - browser_->instant_controller()->SetContentHeight( - contents_container_->height()); - } } void BrowserView::PaintChildren(gfx::Canvas* canvas) { diff --git a/chrome/common/instant_types.cc b/chrome/common/instant_types.cc index fd2849d..bf43433 100644 --- a/chrome/common/instant_types.cc +++ b/chrome/common/instant_types.cc @@ -35,6 +35,7 @@ ThemeBackgroundInfo::ThemeBackgroundInfo() color_a(0), image_horizontal_alignment(THEME_BKGRND_IMAGE_ALIGN_CENTER), image_vertical_alignment(THEME_BKGRND_IMAGE_ALIGN_CENTER), + image_top_offset(0), image_tiling(THEME_BKGRND_IMAGE_NO_REPEAT), image_height(0) { } diff --git a/chrome/common/instant_types.h b/chrome/common/instant_types.h index 43b5429..3760cba 100644 --- a/chrome/common/instant_types.h +++ b/chrome/common/instant_types.h @@ -144,6 +144,10 @@ struct ThemeBackgroundInfo { // is valid. ThemeBackgroundImageAlignment image_vertical_alignment; + // The theme background image top offset is only valid if + // |image_vertical_alignment| is |THEME_BKGRND_IMAGE_ALIGN_TOP|. + int image_top_offset; + // The theme background image tiling is only valid if |theme_id| is valid. ThemeBackgroundImageTiling image_tiling; diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h index 5162ec7..f52cd22 100644 --- a/chrome/common/render_messages.h +++ b/chrome/common/render_messages.h @@ -199,6 +199,7 @@ IPC_STRUCT_TRAITS_BEGIN(ThemeBackgroundInfo) IPC_STRUCT_TRAITS_MEMBER(theme_id) IPC_STRUCT_TRAITS_MEMBER(image_horizontal_alignment) IPC_STRUCT_TRAITS_MEMBER(image_vertical_alignment) + IPC_STRUCT_TRAITS_MEMBER(image_top_offset) IPC_STRUCT_TRAITS_MEMBER(image_tiling) IPC_STRUCT_TRAITS_MEMBER(image_height) IPC_STRUCT_TRAITS_END() @@ -326,9 +327,6 @@ IPC_MESSAGE_ROUTED1(ChromeViewMsg_SearchBoxSetDisplayInstantResults, IPC_MESSAGE_ROUTED1(ChromeViewMsg_SearchBoxThemeChanged, ThemeBackgroundInfo /* value */) -IPC_MESSAGE_ROUTED1(ChromeViewMsg_SearchBoxThemeAreaHeightChanged, - int /* height */) - IPC_MESSAGE_ROUTED2(ChromeViewMsg_SearchBoxFontInformation, string16 /* omnibox_font */, size_t /* omnibox_font_size */) diff --git a/chrome/renderer/resources/extensions/searchbox_api.js b/chrome/renderer/resources/extensions/searchbox_api.js index 1624dc3..77b0d8b 100644 --- a/chrome/renderer/resources/extensions/searchbox_api.js +++ b/chrome/renderer/resources/extensions/searchbox_api.js @@ -267,12 +267,9 @@ if (!chrome.embeddedSearch) { chrome.embeddedSearch.newTabPage = new function() { native function GetThemeBackgroundInfo(); - native function GetThemeAreaHeight(); this.__defineGetter__('themeBackgroundInfo', GetThemeBackgroundInfo); - this.__defineGetter__('themeAreaHeight', GetThemeAreaHeight); - this.onthemeareaheightchange = null; this.onthemechange = null; }; diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc index 396005c..41c29e4 100644 --- a/chrome/renderer/searchbox/searchbox.cc +++ b/chrome/renderer/searchbox/searchbox.cc @@ -20,7 +20,6 @@ SearchBox::SearchBox(content::RenderView* render_view) end_margin_(0), last_results_base_(0), is_key_capture_enabled_(false), - theme_area_height_(0), display_instant_results_(false), omnibox_font_size_(0) { } @@ -104,10 +103,6 @@ const ThemeBackgroundInfo& SearchBox::GetThemeBackgroundInfo() { return theme_info_; } -int SearchBox::GetThemeAreaHeight() { - return theme_area_height_; -} - bool SearchBox::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(SearchBox, message) @@ -130,8 +125,6 @@ bool SearchBox::OnMessageReceived(const IPC::Message& message) { OnKeyCaptureChange) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxThemeChanged, OnThemeChanged) - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxThemeAreaHeightChanged, - OnThemeAreaHeightChanged) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxFontInformation, OnFontInformationReceived) IPC_MESSAGE_UNHANDLED(handled = false) @@ -263,14 +256,6 @@ void SearchBox::OnThemeChanged(const ThemeBackgroundInfo& theme_info) { } } -void SearchBox::OnThemeAreaHeightChanged(int height) { - theme_area_height_ = height; - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { - extensions_v8::SearchBoxExtension::DispatchThemeAreaHeightChange( - render_view()->GetWebView()->mainFrame()); - } -} - double SearchBox::GetZoom() const { WebKit::WebView* web_view = render_view()->GetWebView(); if (web_view) { @@ -299,7 +284,6 @@ void SearchBox::Reset() { autocomplete_results_.clear(); is_key_capture_enabled_ = false; theme_info_ = ThemeBackgroundInfo(); - theme_area_height_ = 0; // Don't reset display_instant_results_ to prevent clearing it on committed // results pages in extended mode. Otherwise resetting it is a no-op because // a new loader is created when it changes; see crbug.com/164662. diff --git a/chrome/renderer/searchbox/searchbox.h b/chrome/renderer/searchbox/searchbox.h index 55c01ed..b6ab5aa 100644 --- a/chrome/renderer/searchbox/searchbox.h +++ b/chrome/renderer/searchbox/searchbox.h @@ -66,7 +66,6 @@ class SearchBox : public content::RenderViewObserver, const InstantAutocompleteResult* GetAutocompleteResultWithId(size_t restricted_id) const; const ThemeBackgroundInfo& GetThemeBackgroundInfo(); - int GetThemeAreaHeight(); private: // Overridden from content::RenderViewObserver: @@ -112,7 +111,6 @@ class SearchBox : public content::RenderViewObserver, std::vector last_autocomplete_results_; bool is_key_capture_enabled_; ThemeBackgroundInfo theme_info_; - int theme_area_height_; bool display_instant_results_; string16 omnibox_font_; size_t omnibox_font_size_; diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc index cd74c6f..dd0aa791 100644 --- a/chrome/renderer/searchbox/searchbox_extension.cc +++ b/chrome/renderer/searchbox/searchbox_extension.cc @@ -187,16 +187,6 @@ static const char kDispatchThemeChangeEventScript[] = " true;" "}"; -static const char kDispatchThemeAreaHeightChangeEventScript[] = - "if (window.chrome &&" - " window.chrome.embeddedSearch &&" - " window.chrome.embeddedSearch.newTabPage.onthemeareaheightchange &&" - " typeof window.chrome.embeddedSearch.newTabPage.onthemeareaheightchange" - " == 'function') {" - " window.chrome.embeddedSearch.newTabPage.onthemeareaheightchange();" - " true;" - "}"; - static const char kDispatchMarginChangeEventScript[] = "if (window.chrome &&" " window.chrome.embeddedSearch &&" @@ -274,13 +264,6 @@ class SearchBoxExtensionWrapper : public v8::Extension { static v8::Handle GetThemeBackgroundInfo( const v8::Arguments& args); - // Gets the theme area height that the entire theme background image should - // fill up. - // Call only when overlay is showing NTP page and GetThemeBackgroundInfo - // returns a non-empty image_url and an image_vertical_alignment that is not - // "top". - static v8::Handle GetThemeAreaHeight(const v8::Arguments& args); - // Gets whether the browser is capturing key strokes. static v8::Handle IsKeyCaptureEnabled(const v8::Arguments& args); @@ -361,8 +344,6 @@ v8::Handle SearchBoxExtensionWrapper::GetNativeFunction( return v8::FunctionTemplate::New(GetDisplayInstantResults); if (name->Equals(v8::String::New("GetThemeBackgroundInfo"))) return v8::FunctionTemplate::New(GetThemeBackgroundInfo); - if (name->Equals(v8::String::New("GetThemeAreaHeight"))) - return v8::FunctionTemplate::New(GetThemeAreaHeight); if (name->Equals(v8::String::New("IsKeyCaptureEnabled"))) return v8::FunctionTemplate::New(IsKeyCaptureEnabled); if (name->Equals(v8::String::New("GetFont"))) @@ -606,12 +587,16 @@ v8::Handle SearchBoxExtensionWrapper::GetThemeBackgroundInfo( info->Set(v8::String::New("imageHorizontalAlignment"), UTF8ToV8String(alignment)); - // The theme background image vertical alignment is one of "top", "bottom", - // "center". + // The theme background image vertical alignment is one of "bottom", + // "center" or, for top-aligned image, "top" or "$x px" where $x is an + // integer to offset top of image by. // This is the vertical component of the CSS "background-position" format. // Value is only valid if |image_url| is not empty. if (theme_info.image_vertical_alignment == THEME_BKGRND_IMAGE_ALIGN_TOP) { - alignment = kCSSBackgroundPositionTop; + if (theme_info.image_top_offset != 0) + alignment = base::IntToString(theme_info.image_top_offset) + "px"; + else + alignment = kCSSBackgroundPositionTop; } else if (theme_info.image_vertical_alignment == THEME_BKGRND_IMAGE_ALIGN_BOTTOM) { alignment = kCSSBackgroundPositionBottom; @@ -651,17 +636,6 @@ v8::Handle SearchBoxExtensionWrapper::GetThemeBackgroundInfo( } // static -v8::Handle SearchBoxExtensionWrapper::GetThemeAreaHeight( - const v8::Arguments& args) { - content::RenderView* render_view = GetRenderView(); - if (!render_view) return v8::Undefined(); - - DVLOG(1) << render_view << " GetThemeAreaHeight: " - << SearchBox::Get(render_view)->GetThemeAreaHeight(); - return v8::Int32::New(SearchBox::Get(render_view)->GetThemeAreaHeight()); -} - -// static v8::Handle SearchBoxExtensionWrapper::GetFont( const v8::Arguments& args) { content::RenderView* render_view = GetRenderView(); @@ -960,10 +934,4 @@ void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { Dispatch(frame, kDispatchThemeChangeEventScript); } -// static -void SearchBoxExtension::DispatchThemeAreaHeightChange( - WebKit::WebFrame* frame) { - Dispatch(frame, kDispatchThemeAreaHeightChangeEventScript); -} - } // namespace extensions_v8 diff --git a/chrome/renderer/searchbox/searchbox_extension.h b/chrome/renderer/searchbox/searchbox_extension.h index cf72a19..6a6c7b0 100644 --- a/chrome/renderer/searchbox/searchbox_extension.h +++ b/chrome/renderer/searchbox/searchbox_extension.h @@ -40,7 +40,6 @@ class SearchBoxExtension { static void DispatchKeyCaptureChange(WebKit::WebFrame* frame); static void DispatchMarginChange(WebKit::WebFrame* frame); static void DispatchThemeChange(WebKit::WebFrame* frame); - static void DispatchThemeAreaHeightChange(WebKit::WebFrame* frame); private: DISALLOW_IMPLICIT_CONSTRUCTORS(SearchBoxExtension); -- cgit v1.1