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