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

Unified Diff: chrome/browser/ui/views/speech_recognition_bubble_views.cc

Issue 260903010: Start removing support for the experimental x-webkit-speech API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Don't touch histograms.xml Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/cocoa/speech_recognition_window_controller.mm ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/speech_recognition_bubble_views.cc
diff --git a/chrome/browser/ui/views/speech_recognition_bubble_views.cc b/chrome/browser/ui/views/speech_recognition_bubble_views.cc
deleted file mode 100644
index 70ef9721f5d1aad55a794d87758f9efffb135caa..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/views/speech_recognition_bubble_views.cc
+++ /dev/null
@@ -1,438 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/speech/speech_recognition_bubble.h"
-
-#include <algorithm>
-
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/views/frame/browser_view.h"
-#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
-#include "content/public/browser/resource_context.h"
-#include "content/public/browser/speech_recognition_manager.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_contents_view.h"
-#include "grit/generated_resources.h"
-#include "grit/theme_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/views/bubble/bubble_delegate.h"
-#include "ui/views/controls/button/label_button.h"
-#include "ui/views/controls/image_view.h"
-#include "ui/views/controls/label.h"
-#include "ui/views/controls/link.h"
-#include "ui/views/controls/link_listener.h"
-#include "ui/views/layout/layout_constants.h"
-#include "ui/views/widget/widget_observer.h"
-
-using content::WebContents;
-
-namespace {
-
-const int kBubbleHorizMargin = 6;
-const int kBubbleVertMargin = 4;
-const int kBubbleHeadingVertMargin = 6;
-
-// This is the SpeechRecognitionBubble content and views bubble delegate.
-class SpeechRecognitionBubbleView : public views::BubbleDelegateView,
- public views::ButtonListener,
- public views::LinkListener {
- public:
- SpeechRecognitionBubbleView(SpeechRecognitionBubbleDelegate* delegate,
- views::View* anchor_view,
- const gfx::Rect& element_rect,
- WebContents* web_contents);
-
- void UpdateLayout(SpeechRecognitionBubbleBase::DisplayMode mode,
- const base::string16& message_text,
- const gfx::ImageSkia& image);
- void SetImage(const gfx::ImageSkia& image);
-
- // views::BubbleDelegateView methods.
- virtual void OnWidgetActivationChanged(views::Widget* widget,
- bool active) OVERRIDE;
- virtual gfx::Rect GetAnchorRect() OVERRIDE;
- virtual void Init() OVERRIDE;
-
- // views::ButtonListener methods.
- virtual void ButtonPressed(views::Button* source,
- const ui::Event& event) OVERRIDE;
-
- // views::LinkListener methods.
- virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE;
-
- // views::View overrides.
- virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
- virtual gfx::Size GetPreferredSize() OVERRIDE;
- virtual void Layout() OVERRIDE;
-
- void set_notify_delegate_on_activation_change(bool notify) {
- notify_delegate_on_activation_change_ = notify;
- }
-
- private:
- SpeechRecognitionBubbleDelegate* delegate_;
- gfx::Rect element_rect_;
- WebContents* web_contents_;
- bool notify_delegate_on_activation_change_;
- views::ImageView* icon_;
- views::Label* heading_;
- views::Label* message_;
- views::LabelButton* try_again_;
- views::LabelButton* cancel_;
- views::Link* mic_settings_;
- SpeechRecognitionBubbleBase::DisplayMode display_mode_;
- const int kIconLayoutMinWidth;
-
- DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionBubbleView);
-};
-
-SpeechRecognitionBubbleView::SpeechRecognitionBubbleView(
- SpeechRecognitionBubbleDelegate* delegate,
- views::View* anchor_view,
- const gfx::Rect& element_rect,
- WebContents* web_contents)
- : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_LEFT),
- delegate_(delegate),
- element_rect_(element_rect),
- web_contents_(web_contents),
- notify_delegate_on_activation_change_(true),
- icon_(NULL),
- heading_(NULL),
- message_(NULL),
- try_again_(NULL),
- cancel_(NULL),
- mic_settings_(NULL),
- display_mode_(SpeechRecognitionBubbleBase::DISPLAY_MODE_WARM_UP),
- kIconLayoutMinWidth(ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
- IDR_SPEECH_INPUT_MIC_EMPTY)->width()) {
- // The bubble lifetime is managed by its controller; explicitly closing
- // on deactivation will cause unexpected behavior.
- set_close_on_deactivate(false);
- // Prevent default behavior of bubble closure on escape key and handle
- // it in the AcceleratorPressed() to avoid an unexpected behavior.
- set_close_on_esc(false);
-
- // Update the bubble's bounds when the window's bounds changes.
- set_move_with_anchor(true);
-}
-
-void SpeechRecognitionBubbleView::OnWidgetActivationChanged(
- views::Widget* widget, bool active) {
- if (widget == GetWidget() && !active && notify_delegate_on_activation_change_)
- delegate_->InfoBubbleFocusChanged();
- BubbleDelegateView::OnWidgetActivationChanged(widget, active);
-}
-
-gfx::Rect SpeechRecognitionBubbleView::GetAnchorRect() {
- gfx::Rect container_rect;
- web_contents_->GetView()->GetContainerBounds(&container_rect);
- gfx::Rect anchor(element_rect_);
- anchor.Offset(container_rect.OffsetFromOrigin());
- if (!container_rect.Intersects(anchor))
- return BubbleDelegateView::GetAnchorRect();
- return anchor;
-}
-
-void SpeechRecognitionBubbleView::Init() {
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
- const gfx::FontList& font_list =
- rb.GetFontList(ui::ResourceBundle::MediumFont);
-
- heading_ = new views::Label(
- l10n_util::GetStringUTF16(IDS_SPEECH_INPUT_BUBBLE_HEADING), font_list);
- heading_->SetBorder(views::Border::CreateEmptyBorder(
- kBubbleHeadingVertMargin, 0, kBubbleHeadingVertMargin, 0));
- heading_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
- AddChildView(heading_);
-
- message_ = new views::Label(base::string16(), font_list);
- message_->SetMultiLine(true);
- AddChildView(message_);
-
- icon_ = new views::ImageView();
- icon_->SetHorizontalAlignment(views::ImageView::CENTER);
- AddChildView(icon_);
-
- cancel_ = new views::LabelButton(this, l10n_util::GetStringUTF16(IDS_CANCEL));
- cancel_->SetStyle(views::Button::STYLE_BUTTON);
- AddChildView(cancel_);
-
- try_again_ = new views::LabelButton(
- this, l10n_util::GetStringUTF16(IDS_SPEECH_INPUT_TRY_AGAIN));
- try_again_->SetStyle(views::Button::STYLE_BUTTON);
- AddChildView(try_again_);
-
- mic_settings_ = new views::Link(
- l10n_util::GetStringUTF16(IDS_SPEECH_INPUT_MIC_SETTINGS));
- mic_settings_->set_listener(this);
- AddChildView(mic_settings_);
-}
-
-void SpeechRecognitionBubbleView::UpdateLayout(
- SpeechRecognitionBubbleBase::DisplayMode mode,
- const base::string16& message_text,
- const gfx::ImageSkia& image) {
- display_mode_ = mode;
- bool is_message = (mode == SpeechRecognitionBubbleBase::DISPLAY_MODE_MESSAGE);
- icon_->SetVisible(!is_message);
- message_->SetVisible(is_message);
- mic_settings_->SetVisible(is_message);
- try_again_->SetVisible(is_message);
- cancel_->SetVisible(
- mode != SpeechRecognitionBubbleBase::DISPLAY_MODE_WARM_UP);
- heading_->SetVisible(
- mode == SpeechRecognitionBubbleBase::DISPLAY_MODE_RECORDING);
-
- // Clickable elements should be enabled if and only if they are visible.
- mic_settings_->SetEnabled(mic_settings_->visible());
- try_again_->SetEnabled(try_again_->visible());
- cancel_->SetEnabled(cancel_->visible());
-
- if (is_message) {
- message_->SetText(message_text);
- } else {
- SetImage(image);
- }
-
- if (icon_->visible())
- icon_->ResetImageSize();
-
- // When moving from warming up to recording state, the size of the content
- // stays the same. So we wouldn't get a resize/layout call from the view
- // system and we do it ourselves.
- if (GetPreferredSize() == size()) // |size()| here is the current size.
- Layout();
-
- SizeToContents();
-}
-
-void SpeechRecognitionBubbleView::SetImage(const gfx::ImageSkia& image) {
- icon_->SetImage(image);
-}
-
-void SpeechRecognitionBubbleView::ButtonPressed(views::Button* source,
- const ui::Event& event) {
- if (source == cancel_) {
- delegate_->InfoBubbleButtonClicked(SpeechRecognitionBubble::BUTTON_CANCEL);
- } else if (source == try_again_) {
- delegate_->InfoBubbleButtonClicked(
- SpeechRecognitionBubble::BUTTON_TRY_AGAIN);
- } else {
- NOTREACHED() << "Unknown button";
- }
-}
-
-void SpeechRecognitionBubbleView::LinkClicked(views::Link* source,
- int event_flags) {
- DCHECK_EQ(mic_settings_, source);
- content::SpeechRecognitionManager::GetInstance()->ShowAudioInputSettings();
-}
-
-bool SpeechRecognitionBubbleView::AcceleratorPressed(
- const ui::Accelerator& accelerator) {
- // The accelerator is added by BubbleDelegateView.
- if (accelerator.key_code() == ui::VKEY_ESCAPE) {
- delegate_->InfoBubbleButtonClicked(SpeechRecognitionBubble::BUTTON_CANCEL);
- return true;
- }
-
- return BubbleDelegateView::AcceleratorPressed(accelerator);
-}
-
-gfx::Size SpeechRecognitionBubbleView::GetPreferredSize() {
- int width = heading_->GetPreferredSize().width();
- int control_width = cancel_->GetPreferredSize().width();
- if (try_again_->visible()) {
- control_width += try_again_->GetPreferredSize().width() +
- views::kRelatedButtonHSpacing;
- }
- width = std::max(width, control_width);
- control_width = std::max(icon_->GetPreferredSize().width(),
- kIconLayoutMinWidth);
- width = std::max(width, control_width);
- if (mic_settings_->visible()) {
- control_width = mic_settings_->GetPreferredSize().width();
- width = std::max(width, control_width);
- }
-
- int height = cancel_->GetPreferredSize().height();
- if (message_->visible()) {
- height += message_->GetHeightForWidth(width) +
- views::kLabelToControlVerticalSpacing;
- }
- if (heading_->visible())
- height += heading_->GetPreferredSize().height();
- if (icon_->visible())
- height += icon_->GetImage().height();
- if (mic_settings_->visible())
- height += mic_settings_->GetPreferredSize().height();
- width += kBubbleHorizMargin * 2;
- height += kBubbleVertMargin * 2;
-
- return gfx::Size(width, height);
-}
-
-void SpeechRecognitionBubbleView::Layout() {
- int x = kBubbleHorizMargin;
- int y = kBubbleVertMargin;
- int available_width = width() - kBubbleHorizMargin * 2;
- int available_height = height() - kBubbleVertMargin * 2;
-
- if (message_->visible()) {
- DCHECK(try_again_->visible());
-
- int control_height = try_again_->GetPreferredSize().height();
- int try_again_width = try_again_->GetPreferredSize().width();
- int cancel_width = cancel_->GetPreferredSize().width();
- y += available_height - control_height;
- x += (available_width - cancel_width - try_again_width -
- views::kRelatedButtonHSpacing) / 2;
- try_again_->SetBounds(x, y, try_again_width, control_height);
- cancel_->SetBounds(x + try_again_width + views::kRelatedButtonHSpacing, y,
- cancel_width, control_height);
-
- control_height = message_->GetHeightForWidth(available_width);
- message_->SetBounds(kBubbleHorizMargin, kBubbleVertMargin,
- available_width, control_height);
- y = kBubbleVertMargin + control_height;
-
- control_height = mic_settings_->GetPreferredSize().height();
- mic_settings_->SetBounds(kBubbleHorizMargin, y, available_width,
- control_height);
- } else {
- DCHECK(icon_->visible());
-
- int control_height = icon_->GetImage().height();
- if (display_mode_ == SpeechRecognitionBubbleBase::DISPLAY_MODE_WARM_UP)
- y = (available_height - control_height) / 2;
- icon_->SetBounds(x, y, available_width, control_height);
- y += control_height;
-
- if (heading_->visible()) {
- control_height = heading_->GetPreferredSize().height();
- heading_->SetBounds(x, y, available_width, control_height);
- y += control_height;
- }
-
- if (cancel_->visible()) {
- control_height = cancel_->GetPreferredSize().height();
- int width = cancel_->GetPreferredSize().width();
- cancel_->SetBounds(x + (available_width - width) / 2, y, width,
- control_height);
- }
- }
-}
-
-// Implementation of SpeechRecognitionBubble.
-class SpeechRecognitionBubbleImpl
- : public SpeechRecognitionBubbleBase,
- public views::WidgetObserver {
- public:
- SpeechRecognitionBubbleImpl(int render_process_id, int render_view_id,
- Delegate* delegate,
- const gfx::Rect& element_rect);
- virtual ~SpeechRecognitionBubbleImpl();
-
- // SpeechRecognitionBubble methods.
- virtual void Show() OVERRIDE;
- virtual void Hide() OVERRIDE;
-
- // SpeechRecognitionBubbleBase methods.
- virtual void UpdateLayout() OVERRIDE;
- virtual void UpdateImage() OVERRIDE;
-
- // views::WidgetObserver methods.
- virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
-
- private:
- Delegate* delegate_;
- SpeechRecognitionBubbleView* bubble_;
- gfx::Rect element_rect_;
-
- DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionBubbleImpl);
-};
-
-SpeechRecognitionBubbleImpl::SpeechRecognitionBubbleImpl(
- int render_process_id, int render_view_id, Delegate* delegate,
- const gfx::Rect& element_rect)
- : SpeechRecognitionBubbleBase(render_process_id, render_view_id),
- delegate_(delegate),
- bubble_(NULL),
- element_rect_(element_rect) {
-}
-
-SpeechRecognitionBubbleImpl::~SpeechRecognitionBubbleImpl() {
- if (bubble_) {
- bubble_->GetWidget()->RemoveObserver(this);
- bubble_->set_notify_delegate_on_activation_change(false);
- bubble_->GetWidget()->Close();
- }
-}
-
-void SpeechRecognitionBubbleImpl::OnWidgetDestroying(views::Widget* widget) {
- bubble_ = NULL;
-}
-
-void SpeechRecognitionBubbleImpl::Show() {
- WebContents* web_contents = GetWebContents();
- if (!web_contents)
- return;
-
- if (!bubble_) {
- views::View* icon = NULL;
-
- // Anchor to the location bar, in case |element_rect| is offscreen.
- Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
- if (browser) {
- BrowserView* browser_view =
- BrowserView::GetBrowserViewForBrowser(browser);
- icon = browser_view->GetLocationBarView() ?
- browser_view->GetLocationBarView()->GetLocationBarAnchor() : NULL;
- }
-
- bubble_ = new SpeechRecognitionBubbleView(delegate_, icon, element_rect_,
- web_contents);
-
- if (!icon) {
- // We dont't have an icon to attach to. Manually specify the web contents
- // window as the parent.
- bubble_->set_parent_window(
- web_contents->GetView()->GetTopLevelNativeWindow());
- }
-
- views::BubbleDelegateView::CreateBubble(bubble_);
- UpdateLayout();
- bubble_->GetWidget()->AddObserver(this);
- }
- bubble_->GetWidget()->Show();
-}
-
-void SpeechRecognitionBubbleImpl::Hide() {
- if (bubble_)
- bubble_->GetWidget()->Hide();
-}
-
-void SpeechRecognitionBubbleImpl::UpdateLayout() {
- if (bubble_ && GetWebContents())
- bubble_->UpdateLayout(display_mode(), message_text(), icon_image());
-}
-
-void SpeechRecognitionBubbleImpl::UpdateImage() {
- if (bubble_ && GetWebContents())
- bubble_->SetImage(icon_image());
-}
-
-} // namespace
-
-SpeechRecognitionBubble* SpeechRecognitionBubble::CreateNativeBubble(
- int render_process_id,
- int render_view_id,
- SpeechRecognitionBubble::Delegate* delegate,
- const gfx::Rect& element_rect) {
- return new SpeechRecognitionBubbleImpl(render_process_id, render_view_id,
- delegate, element_rect);
-}
« no previous file with comments | « chrome/browser/ui/cocoa/speech_recognition_window_controller.mm ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698