open_pdf_in_reader_view.cc revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.h" 6 7#include "chrome/browser/ui/pdf/pdf_tab_helper.h" 8#include "chrome/browser/ui/views/location_bar/location_bar_view.h" 9#include "chrome/browser/ui/views/open_pdf_in_reader_bubble_view.h" 10#include "grit/generated_resources.h" 11#include "grit/theme_resources.h" 12#include "ui/base/accessibility/accessible_view_state.h" 13#include "ui/base/l10n/l10n_util.h" 14#include "ui/base/resource/resource_bundle.h" 15#include "ui/views/widget/widget.h" 16 17OpenPDFInReaderView::OpenPDFInReaderView(LocationBarView* location_bar_view) 18 : location_bar_view_(location_bar_view), 19 bubble_(NULL), 20 model_(NULL) { 21 set_accessibility_focusable(true); 22 SetImage(ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 23 IDR_OMNIBOX_PDF_ICON)); 24 SetTooltipText(l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_OPEN_IN_READER_LINK)); 25 LocationBarView::InitTouchableLocationBarChildView(this); 26} 27 28OpenPDFInReaderView::~OpenPDFInReaderView() { 29 if (bubble_) 30 bubble_->GetWidget()->RemoveObserver(this); 31} 32 33void OpenPDFInReaderView::Update(content::WebContents* web_contents) { 34 model_ = NULL; 35 if (web_contents) { 36 PDFTabHelper* pdf_tab_helper = PDFTabHelper::FromWebContents(web_contents); 37 model_ = pdf_tab_helper->open_in_reader_prompt(); 38 } 39 40 SetVisible(!!model_); 41} 42 43void OpenPDFInReaderView::ShowBubble() { 44 if (bubble_) 45 return; 46 47 DCHECK(model_); 48 bubble_ = new OpenPDFInReaderBubbleView(this, model_); 49 views::BubbleDelegateView::CreateBubble(bubble_); 50 bubble_->GetWidget()->AddObserver(this); 51 bubble_->GetWidget()->Show(); 52} 53 54void OpenPDFInReaderView::GetAccessibleState(ui::AccessibleViewState* state) { 55 state->name = l10n_util::GetStringUTF16(IDS_ACCNAME_OPEN_PDF_IN_READER); 56 state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON; 57} 58 59bool OpenPDFInReaderView::OnMousePressed(const ui::MouseEvent& event) { 60 // Show the bubble on mouse release; that is standard button behavior. 61 return true; 62} 63 64void OpenPDFInReaderView::OnMouseReleased(const ui::MouseEvent& event) { 65 if (event.IsOnlyLeftMouseButton() && HitTestPoint(event.location())) 66 ShowBubble(); 67} 68 69bool OpenPDFInReaderView::OnKeyPressed(const ui::KeyEvent& event) { 70 if (event.key_code() != ui::VKEY_SPACE && 71 event.key_code() != ui::VKEY_RETURN) { 72 return false; 73 } 74 75 ShowBubble(); 76 return true; 77} 78 79void OpenPDFInReaderView::OnWidgetDestroying(views::Widget* widget) { 80 if (!bubble_) 81 return; 82 83 bubble_->GetWidget()->RemoveObserver(this); 84 bubble_ = NULL; 85} 86