15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/collected_cookies_views.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_appcache_helper.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_database_helper.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_file_system_helper.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/cookies_tree_model.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/local_shared_objects_container.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/collected_cookies_infobar_delegate.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/constrained_window_views.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/cookie_info_view.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_host.h" 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_manager.h" 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/locale_settings.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/color_utils.h" 392385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "ui/views/border.h" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/label_button.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/image_view.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h" 432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "ui/views/controls/scroll_view.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/tabbed_pane/tabbed_pane.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/tree/tree_view.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/layout_constants.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/views/window/dialog_delegate.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using web_modal::WebContentsModalDialogManager; 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)using web_modal::WebContentsModalDialogManagerDelegate; 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Declared in browser_dialogs.h so others don't have to depend on our header. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShowCollectedCookiesDialog(content::WebContents* web_contents) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Deletes itself on close. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CollectedCookiesViews(web_contents); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Spacing between the infobar frame and its contents. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kInfobarVerticalPadding = 3; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kInfobarHorizontalPadding = 8; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Width of the infobar frame. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kInfobarBorderSize = 1; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dimensions of the tree views. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kTreeViewWidth = 400; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kTreeViewHeight = 125; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// The color of the border around the cookies tree view. 792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst SkColor kCookiesBorderColor = SkColorSetRGB(0xC8, 0xC8, 0xC8); 802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// Spacing constants used with the new dialog style. 822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst int kTabbedPaneTopPadding = 14; 832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst int kLabelBottomPadding = 17; 842385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst int kCookieInfoBottomPadding = 4; 852385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst int kVPanelPadding = 15; 862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A custom view that conditionally displays an infobar. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InfobarView : public views::View { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InfobarView() { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_ = new views::View; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) || !defined(OS_WIN) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor border_color = SK_ColorGRAY; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor border_color = color_utils::GetSysSkColor(COLOR_3DSHADOW); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Border* border = views::Border::CreateSolidBorder( 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInfobarBorderSize, border_color); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->set_border(border); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info_image_ = new views::ImageView(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info_image_->SetImage(rb.GetImageSkiaNamed(IDR_INFO)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label_ = new views::Label(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~InfobarView() {} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the visibility of the infobar. If |is_visible| is true, a rule for 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |setting| on |domain_name| was created. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateVisibility(bool is_visible, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting, 114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& domain_name) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_visible) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetVisible(false); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 label; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (setting) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTING_BLOCK: 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label = l10n_util::GetStringFUTF16( 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED, domain_name); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTING_ALLOW: 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label = l10n_util::GetStringFUTF16( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED, domain_name); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTING_SESSION_ONLY: 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label = l10n_util::GetStringFUTF16( 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED, domain_name); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label_->SetText(label); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->Layout(); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetVisible(true); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize contents and layout. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init() { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(content_); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->SetLayoutManager( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new views::BoxLayout(views::BoxLayout::kHorizontal, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInfobarHorizontalPadding, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInfobarVerticalPadding, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::kRelatedControlSmallHorizontalSpacing)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->AddChildView(info_image_); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->AddChildView(label_); 156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UpdateVisibility(false, CONTENT_SETTING_BLOCK, base::string16()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // views::View overrides. 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual gfx::Size GetPreferredSize() OVERRIDE { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!visible()) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::Size(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add space around the banner. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size(content_->GetPreferredSize()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size.Enlarge(0, 2 * views::kRelatedControlVerticalSpacing); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return size; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->SetBounds( 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, views::kRelatedControlVerticalSpacing, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width(), height() - views::kRelatedControlVerticalSpacing); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 176a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) virtual void ViewHierarchyChanged( 177a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const ViewHierarchyChangedDetails& details) OVERRIDE { 178a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (details.is_add && details.child == this) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Init(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Holds the info icon image and text label and renders the border. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* content_; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Info icon image. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageView* info_image_; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The label responsible for rendering the text. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* label_; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(InfobarView); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, public: 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CollectedCookiesViews::CollectedCookiesViews(content::WebContents* web_contents) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : web_contents_(web_contents), 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_label_(NULL), 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_label_(NULL), 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_(NULL), 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_(NULL), 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block_allowed_button_(NULL), 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_blocked_button_(NULL), 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_session_blocked_button_(NULL), 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_info_view_(NULL), 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) infobar_(NULL), 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_changed_(false) { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<TabSpecificContentSettings>(content_settings)); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsModalDialogManager* web_contents_modal_dialog_manager = 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsModalDialogManager::FromWebContents(web_contents); 2133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) WebContentsModalDialogManagerDelegate* modal_delegate = 2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) web_contents_modal_dialog_manager->delegate(); 2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(modal_delegate); 2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) window_ = views::Widget::CreateWindowAsFramelessChild( 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) this, modal_delegate->GetWebContentsModalDialogHost()->GetHostView()); 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_modal_dialog_manager->ShowDialog(window_->GetNativeView()); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::DialogDelegate implementation: 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 224d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 CollectedCookiesViews::GetWindowTitle() const { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_DIALOG_TITLE); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int CollectedCookiesViews::GetDialogButtons() const { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::DIALOG_BUTTON_CANCEL; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 232d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 CollectedCookiesViews::GetDialogButtonLabel( 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DialogButton button) const { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CLOSE); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::DeleteDelegate() { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CollectedCookiesViews::Cancel() { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (status_changed_) { 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CollectedCookiesInfoBarDelegate::Create( 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService::FromWebContents(web_contents_)); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(wittman): Remove this override once we move to the new style frame view 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// on all dialogs. 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::NonClientFrameView* CollectedCookiesViews::CreateNonClientFrameView( 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* widget) { 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateConstrainedStyleNonClientFrameView( 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget, 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetBrowserContext()); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::ModalType CollectedCookiesViews::GetModalType() const { 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ui::MODAL_TYPE_CHILD; 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return views::WidgetDelegate::GetModalType(); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::ButtonListener implementation: 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::ButtonPressed(views::Button* sender, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Event& event) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sender == block_allowed_button_) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddContentException(allowed_cookies_tree_, CONTENT_SETTING_BLOCK); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (sender == allow_blocked_button_) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddContentException(blocked_cookies_tree_, CONTENT_SETTING_ALLOW); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (sender == for_session_blocked_button_) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddContentException(blocked_cookies_tree_, CONTENT_SETTING_SESSION_ONLY); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::TabbedPaneListener implementation: 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::TabSelectedAt(int index) { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnableControls(); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowCookieInfo(); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::TreeViewController implementation: 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::OnTreeViewSelectionChanged( 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::TreeView* tree_view) { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnableControls(); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowCookieInfo(); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::View overrides: 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)gfx::Size CollectedCookiesViews::GetMinimumSize() { 30168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Allow UpdateWebContentsModalDialogPosition to clamp the dialog width. 30268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return gfx::Size(0, View::GetMinimumSize().height()); 30368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 30468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 305a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void CollectedCookiesViews::ViewHierarchyChanged( 306a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const ViewHierarchyChangedDetails& details) { 307a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (details.is_add && details.child == this) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Init(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, private: 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CollectedCookiesViews::~CollectedCookiesViews() { 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetModel(NULL); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetModel(NULL); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::Init() { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using views::GridLayout; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout* layout = GridLayout::CreatePanel(this); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLayoutManager(layout); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int single_column_layout_id = 0; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, single_column_layout_id); 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::TabbedPane* tabbed_pane = new views::TabbedPane(); 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->SetInsets(gfx::Insets(kTabbedPaneTopPadding, 0, 0, 0)); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(tabbed_pane); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NOTE: Panes must be added after |tabbed_pane| has been added to its parent. 336a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 label_allowed = l10n_util::GetStringUTF16( 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_TAB_LABEL); 338a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 label_blocked = l10n_util::GetStringUTF16( 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_TAB_LABEL); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabbed_pane->AddTab(label_allowed, CreateAllowedPane()); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabbed_pane->AddTab(label_blocked, CreateBlockedPane()); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabbed_pane->SelectTabAt(0); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabbed_pane->set_listener(this); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->StartRow(0, single_column_layout_id); 347ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch cookie_info_view_ = new CookieInfoView(); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(cookie_info_view_); 349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddPaddingRow(0, kCookieInfoBottomPadding); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->StartRow(0, single_column_layout_id); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) infobar_ = new InfobarView(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(infobar_); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnableControls(); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowCookieInfo(); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* CollectedCookiesViews::CreateAllowedPane() { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents_); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the controls that go into the pane. 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_label_ = new views::Label(l10n_util::GetStringUTF16( 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL)); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LocalSharedObjectsContainer& allowed_data = 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->allowed_local_shared_objects(); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_model_ = allowed_data.CreateCookiesTreeModel(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_ = new views::TreeView(); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetModel(allowed_cookies_tree_model_.get()); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetRootShown(false); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetEditable(false); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->set_auto_expand_children(true); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetController(this); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) block_allowed_button_ = new views::LabelButton(this, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_BLOCK_BUTTON)); 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) block_allowed_button_->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the view that holds all the controls together. This will be the 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pane added to the tabbed pane. 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using views::GridLayout; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* pane = new views::View(); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout* layout = GridLayout::CreatePanel(pane); 387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->SetInsets(kVPanelPadding, views::kButtonHEdgeMarginNew, 388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kVPanelPadding, views::kButtonHEdgeMarginNew); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pane->SetLayoutManager(layout); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int single_column_layout_id = 0; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, single_column_layout_id); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(allowed_label_); 398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddPaddingRow(0, kLabelBottomPadding); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(1, single_column_layout_id); 4012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch layout->AddView(CreateScrollView(allowed_cookies_tree_), 1, 1, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::FILL, GridLayout::FILL, kTreeViewWidth, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTreeViewHeight); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, single_column_layout_id); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(block_allowed_button_, 1, 1, GridLayout::LEADING, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::CENTER); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pane; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* CollectedCookiesViews::CreateBlockedPane() { 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents_); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the controls that go into the pane. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_label_ = new views::Label( 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16( 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kBlockThirdPartyCookies) ? 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED : 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL)); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_label_->SetMultiLine(true); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LocalSharedObjectsContainer& blocked_data = 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->blocked_local_shared_objects(); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_model_ = blocked_data.CreateCookiesTreeModel(); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_ = new views::TreeView(); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetModel(blocked_cookies_tree_model_.get()); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetRootShown(false); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetEditable(false); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->set_auto_expand_children(true); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetController(this); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) allow_blocked_button_ = new views::LabelButton(this, 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_ALLOW_BUTTON)); 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) allow_blocked_button_->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for_session_blocked_button_ = new views::LabelButton(this, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_SESSION_ONLY_BUTTON)); 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for_session_blocked_button_->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the view that holds all the controls together. This will be the 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pane added to the tabbed pane. 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using views::GridLayout; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* pane = new views::View(); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout* layout = GridLayout::CreatePanel(pane); 452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->SetInsets(kVPanelPadding, views::kButtonHEdgeMarginNew, 453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kVPanelPadding, views::kButtonHEdgeMarginNew); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pane->SetLayoutManager(layout); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int single_column_layout_id = 0; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int three_columns_layout_id = 1; 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set = layout->AddColumnSet(three_columns_layout_id); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, single_column_layout_id); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(blocked_label_, 1, 1, GridLayout::FILL, GridLayout::FILL); 471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddPaddingRow(0, kLabelBottomPadding); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(1, single_column_layout_id); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView( 4752385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch CreateScrollView(blocked_cookies_tree_), 1, 1, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::FILL, GridLayout::FILL, kTreeViewWidth, kTreeViewHeight); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, three_columns_layout_id); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(allow_blocked_button_); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(for_session_blocked_button_); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pane; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochviews::View* CollectedCookiesViews::CreateScrollView(views::TreeView* pane) { 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::ScrollView* scroll_view = new views::ScrollView(); 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scroll_view->SetContents(pane); 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scroll_view->set_border( 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::Border::CreateSolidBorder(1, kCookiesBorderColor)); 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return scroll_view; 4922385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 4932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::EnableControls() { 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enable_allowed_buttons = false; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TreeModelNode* node = allowed_cookies_tree_->GetSelectedNode(); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node) { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cookie_node->GetDetailedInfo().node_type == 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode::DetailedInfo::TYPE_HOST) { 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enable_allowed_buttons = static_cast<CookieTreeHostNode*>( 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_node)->CanCreateContentException(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block_allowed_button_->SetEnabled(enable_allowed_buttons); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enable_blocked_buttons = false; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = blocked_cookies_tree_->GetSelectedNode(); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node) { 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cookie_node->GetDetailedInfo().node_type == 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode::DetailedInfo::TYPE_HOST) { 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enable_blocked_buttons = static_cast<CookieTreeHostNode*>( 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_node)->CanCreateContentException(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_blocked_button_->SetEnabled(enable_blocked_buttons); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_session_blocked_button_->SetEnabled(enable_blocked_buttons); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::ShowCookieInfo() { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TreeModelNode* node = allowed_cookies_tree_->GetSelectedNode(); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!node) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = blocked_cookies_tree_->GetSelectedNode(); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node) { 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CookieTreeNode::DetailedInfo detailed_info = 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_node->GetDetailedInfo(); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (detailed_info.node_type == CookieTreeNode::DetailedInfo::TYPE_COOKIE) { 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_info_view_->SetCookie(detailed_info.cookie->Domain(), 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *detailed_info.cookie); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_info_view_->ClearCookieDisplay(); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_info_view_->ClearCookieDisplay(); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::AddContentException(views::TreeView* tree_view, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting) { 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeHostNode* host_node = 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<CookieTreeHostNode*>(tree_view->GetSelectedNode()); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_node->CreateContentException( 5497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CookieSettings::Factory::GetForProfile(profile).get(), setting); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) infobar_->UpdateVisibility(true, setting, host_node->GetTitle()); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_changed_ = true; 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, content::NotificationObserver implementation: 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::Observe( 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, type); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->Close(); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 564