summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/frame/web_app_left_header_view_ash.cc
blob: 2fb92c3e0cd20452ca9806f219efcc254bb720fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Copyright 2014 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/ui/views/frame/web_app_left_header_view_ash.h"

#include "ash/frame/caption_buttons/frame_caption_button.h"
#include "ash/frame/caption_buttons/frame_caption_button_container_view.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/ssl/chrome_security_state_model_client.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "components/toolbar/toolbar_model.h"
#include "content/public/browser/navigation_entry.h"
#include "grit/ash_resources.h"
#include "ui/gfx/vector_icons_public.h"
#include "ui/views/layout/box_layout.h"

// static
const char WebAppLeftHeaderView::kViewClassName[] = "WebAppLeftHeaderView";

WebAppLeftHeaderView::WebAppLeftHeaderView(BrowserView* browser_view)
    : browser_view_(browser_view) {
  SetLayoutManager(
      new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));

  back_button_ =
      new ash::FrameCaptionButton(this, ash::CAPTION_BUTTON_ICON_BACK);
  back_button_->SetImage(ash::CAPTION_BUTTON_ICON_BACK,
                         ash::FrameCaptionButton::ANIMATE_NO,
                         gfx::VectorIconId::WINDOW_CONTROL_BACK);
  AddChildView(back_button_);

  location_icon_ =
      new ash::FrameCaptionButton(this, ash::CAPTION_BUTTON_ICON_LOCATION);
  AddChildView(location_icon_);

  Update();
}

WebAppLeftHeaderView::~WebAppLeftHeaderView() {
}

void WebAppLeftHeaderView::Update() {
  location_icon_->SetImage(
      ash::CAPTION_BUTTON_ICON_LOCATION, ash::FrameCaptionButton::ANIMATE_NO,
      browser_view_->browser()->toolbar_model()->GetVectorIcon());

  back_button_->SetState(
      chrome::IsCommandEnabled(browser_view_->browser(), IDC_BACK)
          ? views::Button::STATE_NORMAL
          : views::Button::STATE_DISABLED);
}

void WebAppLeftHeaderView::SetPaintAsActive(bool active) {
  // TODO(benwells): Check that the disabled and inactive states should be
  // drawn in the same way.
  back_button_->set_paint_as_active(
      active && chrome::IsCommandEnabled(browser_view_->browser(), IDC_BACK));
  location_icon_->set_paint_as_active(active);
}

views::View* WebAppLeftHeaderView::GetLocationIconView() const {
  return location_icon_;
}

const char* WebAppLeftHeaderView::GetClassName() const {
  return kViewClassName;
}

void WebAppLeftHeaderView::ButtonPressed(views::Button* sender,
                                         const ui::Event& event) {
  if (sender == back_button_)
    chrome::ExecuteCommand(browser_view_->browser(), IDC_BACK);
  else if (sender == location_icon_)
    ShowWebsiteSettings();
  else
    NOTREACHED();
}

void WebAppLeftHeaderView::ShowWebsiteSettings() const {
  content::WebContents* tab = browser_view_->GetActiveWebContents();
  if (!tab)
    return;

  // Important to use GetVisibleEntry to match what's showing in the title area.
  content::NavigationEntry* nav_entry = tab->GetController().GetVisibleEntry();
  // The visible entry can be NULL in the case of window.open("").
  if (!nav_entry)
    return;

  ChromeSecurityStateModelClient* security_model_client =
      ChromeSecurityStateModelClient::FromWebContents(tab);
  DCHECK(security_model_client);

  chrome::ShowWebsiteSettings(browser_view_->browser(), tab,
                              nav_entry->GetURL(),
                              security_model_client->GetSecurityInfo());
}