172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/collected_cookies_win.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/cookies_tree_model.h"
821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/collected_cookies_infobar_delegate.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/views/cookie_info_view.h"
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_details.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_source.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/locale_settings.h"
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/theme_resources.h"
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h"
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/color_utils.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/button/native_button.h"
213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/controls/image_view.h"
223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/controls/label.h"
233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/controls/separator.h"
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/tabbed_pane/tabbed_pane.h"
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/box_layout.h"
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/grid_layout.h"
2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/layout_constants.h"
283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/widget/root_view.h"
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/widget/widget_win.h"
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/window/window.h"
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser {
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Declared in browser_dialogs.h so others don't have to depend on our header.
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ShowCollectedCookiesDialog(gfx::NativeWindow parent_window,
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                TabContents* tab_contents) {
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Deletes itself on close.
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  new CollectedCookiesWin(parent_window, tab_contents);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}  // namespace browser
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace {
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Spacing between the infobar frame and its contents.
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kInfobarVerticalPadding = 3;
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kInfobarHorizontalPadding = 8;
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Width of the infobar frame.
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kInfobarBorderSize = 1;
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Dimensions of the tree views.
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kTreeViewWidth = 400;
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kTreeViewHeight = 125;
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
5521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}  // namespace
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// A custom view that conditionally displays an infobar.
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass InfobarView : public views::View {
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public:
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  InfobarView() {
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    content_ = new views::View;
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    SkColor border_color = color_utils::GetSysSkColor(COLOR_3DSHADOW);
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    views::Border* border = views::Border::CreateSolidBorder(
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        kInfobarBorderSize, border_color);
653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    content_->set_border(border);
663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    ResourceBundle& rb = ResourceBundle::GetSharedInstance();
683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    info_image_ = new views::ImageView();
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    info_image_->SetImage(rb.GetBitmapNamed(IDR_INFO));
703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    label_ = new views::Label();
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ~InfobarView() {}
733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Update the visibility of the infobar. If |is_visible| is true, a rule for
753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // |setting| on |domain_name| was created.
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void UpdateVisibility(bool is_visible,
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                        ContentSetting setting,
783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                        const std::wstring& domain_name) {
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    if (!is_visible) {
803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      SetVisible(false);
813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      return;
823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    }
833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    std::wstring label;
853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    switch (setting) {
863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      case CONTENT_SETTING_BLOCK:
873f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen        label = UTF16ToWide(l10n_util::GetStringFUTF16(
883f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen            IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED,
893f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen            WideToUTF16(domain_name)));
903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        break;
913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      case CONTENT_SETTING_ALLOW:
933f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen        label = UTF16ToWide(l10n_util::GetStringFUTF16(
943f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen            IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED,
953f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen            WideToUTF16(domain_name)));
963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        break;
973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      case CONTENT_SETTING_SESSION_ONLY:
993f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen        label = UTF16ToWide(l10n_util::GetStringFUTF16(
1003f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen            IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED,
1013f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen            WideToUTF16(domain_name)));
1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        break;
1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      default:
1053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        NOTREACHED();
1063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    }
1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    label_->SetText(label);
1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    content_->Layout();
1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    SetVisible(true);
1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private:
1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Initialize contents and layout.
1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void Init() {
1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    AddChildView(content_);
1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    content_->SetLayoutManager(
1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        new views::BoxLayout(views::BoxLayout::kHorizontal,
1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                             kInfobarHorizontalPadding,
1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                             kInfobarVerticalPadding,
12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                             views::kRelatedControlSmallHorizontalSpacing));
1213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    content_->AddChildView(info_image_);
1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    content_->AddChildView(label_);
1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    UpdateVisibility(false, CONTENT_SETTING_BLOCK, std::wstring());
1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // views::View overrides.
1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual gfx::Size GetPreferredSize() {
1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    if (!IsVisible())
1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      return gfx::Size();
1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // Add space around the banner.
1323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    gfx::Size size(content_->GetPreferredSize());
13372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    size.Enlarge(0, 2 * views::kRelatedControlVerticalSpacing);
1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return size;
1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void Layout() {
1383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    content_->SetBounds(
13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        0, views::kRelatedControlVerticalSpacing,
14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        width(), height() - views::kRelatedControlVerticalSpacing);
1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void ViewHierarchyChanged(bool is_add,
1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                    views::View* parent,
1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                    views::View* child) {
1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    if (is_add && child == this)
1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      Init();
1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Holds the info icon image and text label and renders the border.
1513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  views::View* content_;
1523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Info icon image.
1533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  views::ImageView* info_image_;
1543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // The label responsible for rendering the text.
1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  views::Label* label_;
1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DISALLOW_COPY_AND_ASSIGN(InfobarView);
1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CollectedCookiesWin, constructor and destructor:
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCollectedCookiesWin::CollectedCookiesWin(gfx::NativeWindow parent_window,
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         TabContents* tab_contents)
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : tab_contents_(tab_contents),
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      allowed_label_(NULL),
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      blocked_label_(NULL),
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      allowed_cookies_tree_(NULL),
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      blocked_cookies_tree_(NULL),
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      block_allowed_button_(NULL),
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      allow_blocked_button_(NULL),
1723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      for_session_blocked_button_(NULL),
173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      infobar_(NULL),
174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      status_changed_(false) {
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabSpecificContentSettings* content_settings =
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      tab_contents->GetTabSpecificContentSettings();
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  registrar_.Add(this, NotificationType::COLLECTED_COOKIES_SHOWN,
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Source<TabSpecificContentSettings>(content_settings));
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Init();
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  window_ = tab_contents_->CreateConstrainedDialog(this);
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCollectedCookiesWin::~CollectedCookiesWin() {
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_->SetModel(NULL);
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_->SetModel(NULL);
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CollectedCookiesWin::Init() {
191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  using views::GridLayout;
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GridLayout* layout = GridLayout::CreatePanel(this);
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetLayoutManager(layout);
195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const int single_column_layout_id = 0;
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id);
198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                        GridLayout::USE_PREF, 0, 0);
200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const int single_column_with_padding_layout_id = 1;
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  views::ColumnSet* column_set_with_padding = layout->AddColumnSet(
203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      single_column_with_padding_layout_id);
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  column_set_with_padding->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                     GridLayout::USE_PREF, 0, 0);
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  column_set_with_padding->AddPaddingColumn(0, 2);
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->StartRow(0, single_column_layout_id);
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  views::TabbedPane* tabbed_pane = new views::TabbedPane();
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddView(tabbed_pane);
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // NOTE: the panes need to be added after the tabbed_pane has been added to
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // its parent.
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::wstring label_allowed = UTF16ToWide(l10n_util::GetStringUTF16(
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_TAB_LABEL));
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::wstring label_blocked = UTF16ToWide(l10n_util::GetStringUTF16(
216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_TAB_LABEL));
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  tabbed_pane->AddTab(label_allowed, CreateAllowedPane());
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  tabbed_pane->AddTab(label_blocked, CreateBlockedPane());
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  tabbed_pane->SelectTabAt(0);
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  tabbed_pane->set_listener(this);
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->StartRow(0, single_column_with_padding_layout_id);
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  cookie_info_view_ = new CookieInfoView(false);
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddView(cookie_info_view_);
226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->StartRow(0, single_column_with_padding_layout_id);
229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  infobar_ = new InfobarView();
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddView(infobar_);
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EnableControls();
233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ShowCookieInfo();
234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenviews::View* CollectedCookiesWin::CreateAllowedPane() {
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabSpecificContentSettings* content_settings =
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      tab_contents_->GetTabSpecificContentSettings();
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Create the controls that go into the pane.
2413f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  allowed_label_ = new views::Label(UTF16ToWide(l10n_util::GetStringUTF16(
2423f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL)));
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_model_.reset(
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      content_settings->GetAllowedCookiesTreeModel());
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_ = new views::TreeView();
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_->SetModel(allowed_cookies_tree_model_.get());
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_->SetController(this);
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_->SetRootShown(false);
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_->SetEditable(false);
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_->set_lines_at_root(true);
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allowed_cookies_tree_->set_auto_expand_children(true);
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  block_allowed_button_ = new views::NativeButton(this, UTF16ToWide(
254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_BLOCK_BUTTON)));
255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Create the view that holds all the controls together.  This will be the
257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // pane added to the tabbed pane.
258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  using views::GridLayout;
259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  views::View* pane = new views::View();
261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GridLayout* layout = GridLayout::CreatePanel(pane);
262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  pane->SetLayoutManager(layout);
263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const int single_column_layout_id = 0;
265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id);
266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1,
267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                        GridLayout::USE_PREF, 0, 0);
268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->StartRow(0, single_column_layout_id);
270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddView(allowed_label_);
271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->StartRow(1, single_column_layout_id);
274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddView(allowed_cookies_tree_, 1, 1, GridLayout::FILL,
275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                  GridLayout::FILL, kTreeViewWidth, kTreeViewHeight);
276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->StartRow(0, single_column_layout_id);
279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  layout->AddView(block_allowed_button_, 1, 1, GridLayout::LEADING,
280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                  GridLayout::CENTER);
281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return pane;
283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenviews::View* CollectedCookiesWin::CreateBlockedPane() {
286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TabSpecificContentSettings* content_settings =
287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      tab_contents_->GetTabSpecificContentSettings();
288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  HostContentSettingsMap* host_content_settings_map =
290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      tab_contents_->profile()->GetHostContentSettingsMap();
291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Create the controls that go into the pane.
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_label_ = new views::Label(
2943f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(
2953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          host_content_settings_map->BlockThirdPartyCookies() ?
2963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED :
2973f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen              IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL)));
2983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  blocked_label_->SetMultiLine(true);
2993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  blocked_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_model_.reset(
301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      content_settings->GetBlockedCookiesTreeModel());
302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_ = new views::TreeView();
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_->SetModel(blocked_cookies_tree_model_.get());
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_->SetController(this);
305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_->SetRootShown(false);
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_->SetEditable(false);
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_->set_lines_at_root(true);
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  blocked_cookies_tree_->set_auto_expand_children(true);
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  allow_blocked_button_ = new views::NativeButton(this, UTF16ToWide(
311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_ALLOW_BUTTON)));
312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  for_session_blocked_button_ = new views::NativeButton(this, UTF16ToWide(
313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_SESSION_ONLY_BUTTON)));
314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Create the view that holds all the controls together.  This will be the
316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // pane added to the tabbed pane.
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  using views::GridLayout;
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  views::View* pane = new views::View();
320ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GridLayout* layout = GridLayout::CreatePanel(pane);
321ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  pane->SetLayoutManager(layout);
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int single_column_layout_id = 0;
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id);
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1,
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        GridLayout::USE_PREF, 0, 0);
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int three_columns_layout_id = 1;
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  column_set = layout->AddColumnSet(three_columns_layout_id);
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        GridLayout::USE_PREF, 0, 0);
33272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        GridLayout::USE_PREF, 0, 0);
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->StartRow(0, single_column_layout_id);
3373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  layout->AddView(blocked_label_, 1, 1, GridLayout::FILL, GridLayout::FILL);
33872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->StartRow(1, single_column_layout_id);
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(
3423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      blocked_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL,
3433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      kTreeViewWidth, kTreeViewHeight);
34472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->StartRow(0, three_columns_layout_id);
347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(allow_blocked_button_);
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(for_session_blocked_button_);
349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return pane;
351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ConstrainedDialogDelegate implementation.
355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::wstring CollectedCookiesWin::GetWindowTitle() const {
3573f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  return UTF16ToWide(
3583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_DIALOG_TITLE));
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint CollectedCookiesWin::GetDialogButtons() const {
362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MessageBoxFlags::DIALOGBUTTON_CANCEL;
363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::wstring CollectedCookiesWin::GetDialogButtonLabel(
366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MessageBoxFlags::DialogButton button) const {
3673f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  return UTF16ToWide(l10n_util::GetStringUTF16(IDS_CLOSE));
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CollectedCookiesWin::DeleteDelegate() {
371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  delete this;
372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool CollectedCookiesWin::Cancel() {
375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (status_changed_) {
376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    tab_contents_->AddInfoBar(
377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        new CollectedCookiesInfoBarDelegate(tab_contents_));
378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::View* CollectedCookiesWin::GetContentsView() {
384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return this;
385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// views::ButtonListener implementation.
389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CollectedCookiesWin::ButtonPressed(views::Button* sender,
391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        const views::Event& event) {
392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (sender == block_allowed_button_)
393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    AddContentException(allowed_cookies_tree_, CONTENT_SETTING_BLOCK);
394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  else if (sender == allow_blocked_button_)
395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    AddContentException(blocked_cookies_tree_, CONTENT_SETTING_ALLOW);
396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  else if (sender == for_session_blocked_button_)
397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    AddContentException(blocked_cookies_tree_, CONTENT_SETTING_SESSION_ONLY);
398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// views::TabbedPaneListener implementation.
402ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
403ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid CollectedCookiesWin::TabSelectedAt(int index) {
404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EnableControls();
405ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ShowCookieInfo();
406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen///////////////////////////////////////////////////////////////////////////////
409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// views::TreeViewController implementation.
410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CollectedCookiesWin::OnTreeViewSelectionChanged(
412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    views::TreeView* tree_view) {
413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EnableControls();
414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ShowCookieInfo();
415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CollectedCookiesWin, private methods.
419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CollectedCookiesWin::EnableControls() {
421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool enable_allowed_buttons = false;
42272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ui::TreeModelNode* node = allowed_cookies_tree_->GetSelectedNode();
423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (node) {
424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node);
425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (cookie_node->GetDetailedInfo().node_type ==
426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        CookieTreeNode::DetailedInfo::TYPE_ORIGIN) {
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      enable_allowed_buttons = static_cast<CookieTreeOriginNode*>(
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          cookie_node)->CanCreateContentException();
429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  block_allowed_button_->SetEnabled(enable_allowed_buttons);
432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool enable_blocked_buttons = false;
434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  node = blocked_cookies_tree_->GetSelectedNode();
435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (node) {
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node);
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (cookie_node->GetDetailedInfo().node_type ==
438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        CookieTreeNode::DetailedInfo::TYPE_ORIGIN) {
439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      enable_blocked_buttons = static_cast<CookieTreeOriginNode*>(
440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          cookie_node)->CanCreateContentException();
441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  allow_blocked_button_->SetEnabled(enable_blocked_buttons);
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for_session_blocked_button_->SetEnabled(enable_blocked_buttons);
445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
447ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid CollectedCookiesWin::ShowCookieInfo() {
448ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ui::TreeModelNode* node = allowed_cookies_tree_->GetSelectedNode();
449ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!node)
450ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    node = blocked_cookies_tree_->GetSelectedNode();
451ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
452ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (node) {
453ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node);
454ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const CookieTreeNode::DetailedInfo detailed_info =
455ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        cookie_node->GetDetailedInfo();
456ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
457ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (detailed_info.node_type == CookieTreeNode::DetailedInfo::TYPE_COOKIE) {
458ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      CookieTreeCookieNode* cookie_info_node =
459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          static_cast<CookieTreeCookieNode*>(cookie_node);
460ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      cookie_info_view_->SetCookie(detailed_info.cookie->Domain(),
461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                   *detailed_info.cookie);
462ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    } else {
463ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      cookie_info_view_->ClearCookieDisplay();
464ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    }
465ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  } else {
466ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    cookie_info_view_->ClearCookieDisplay();
467ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
468ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
469ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CollectedCookiesWin::AddContentException(views::TreeView* tree_view,
471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                              ContentSetting setting) {
472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookieTreeOriginNode* origin_node =
473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      static_cast<CookieTreeOriginNode*>(tree_view->GetSelectedNode());
474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin_node->CreateContentException(
475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      tab_contents_->profile()->GetHostContentSettingsMap(), setting);
4763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  infobar_->UpdateVisibility(true, setting, origin_node->GetTitle());
477dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  gfx::Rect bounds = GetWidget()->GetClientAreaScreenBounds();
4783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // WidgetWin::GetBounds returns the bounds relative to the parent window,
4793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // while WidgetWin::SetBounds wants screen coordinates. Do the translation
4803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // here until http://crbug.com/52851 is fixed.
4813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  POINT topleft = {bounds.x(), bounds.y()};
4823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  MapWindowPoints(HWND_DESKTOP, tab_contents_->GetNativeView(), &topleft, 1);
4833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  gfx::Size size = GetRootView()->GetPreferredSize();
4843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bounds.SetRect(topleft.x, topleft.y, size.width(), size.height());
4853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  GetWidget()->SetBounds(bounds);
486ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  status_changed_ = true;
487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// NotificationObserver implementation.
491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CollectedCookiesWin::Observe(NotificationType type,
493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   const NotificationSource& source,
494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   const NotificationDetails& details) {
495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(type == NotificationType::COLLECTED_COOKIES_SHOWN);
496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK_EQ(Source<TabSpecificContentSettings>(source).ptr(),
497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            tab_contents_->GetTabSpecificContentSettings());
498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  window_->CloseConstrainedWindow();
499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
500