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" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_channel_id_helper.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_database_helper.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_file_system_helper.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_local_storage_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" 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (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" 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/locale_settings.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/color_utils.h" 362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "ui/views/border.h" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/label_button.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/image_view.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h" 402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "ui/views/controls/scroll_view.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/tabbed_pane/tabbed_pane.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/tree/tree_view.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/layout_constants.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Declared in browser_dialogs.h so others don't have to depend on our header. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShowCollectedCookiesDialog(content::WebContents* web_contents) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Deletes itself on close. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CollectedCookiesViews(web_contents); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Spacing between the infobar frame and its contents. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kInfobarVerticalPadding = 3; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kInfobarHorizontalPadding = 8; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Width of the infobar frame. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kInfobarBorderSize = 1; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dimensions of the tree views. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kTreeViewWidth = 400; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kTreeViewHeight = 125; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// The color of the border around the cookies tree view. 722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst SkColor kCookiesBorderColor = SkColorSetRGB(0xC8, 0xC8, 0xC8); 732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 742385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// Spacing constants used with the new dialog style. 752385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst int kTabbedPaneTopPadding = 14; 762385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst int kLabelBottomPadding = 17; 772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst int kCookieInfoBottomPadding = 4; 782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst int kVPanelPadding = 15; 792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A custom view that conditionally displays an infobar. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InfobarView : public views::View { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InfobarView() { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_ = new views::View; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor border_color = SK_ColorGRAY; 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content_->SetBorder( 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) views::Border::CreateSolidBorder(kInfobarBorderSize, border_color)); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info_image_ = new views::ImageView(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info_image_->SetImage(rb.GetImageSkiaNamed(IDR_INFO)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label_ = new views::Label(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~InfobarView() {} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the visibility of the infobar. If |is_visible| is true, a rule for 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |setting| on |domain_name| was created. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateVisibility(bool is_visible, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting, 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& domain_name) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_visible) { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetVisible(false); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 label; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (setting) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTING_BLOCK: 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label = l10n_util::GetStringFUTF16( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED, domain_name); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTING_ALLOW: 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label = l10n_util::GetStringFUTF16( 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED, domain_name); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONTENT_SETTING_SESSION_ONLY: 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label = l10n_util::GetStringFUTF16( 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED, domain_name); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label_->SetText(label); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->Layout(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetVisible(true); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize contents and layout. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init() { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(content_); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->SetLayoutManager( 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new views::BoxLayout(views::BoxLayout::kHorizontal, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInfobarHorizontalPadding, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInfobarVerticalPadding, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::kRelatedControlSmallHorizontalSpacing)); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->AddChildView(info_image_); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->AddChildView(label_); 144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UpdateVisibility(false, CONTENT_SETTING_BLOCK, base::string16()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // views::View overrides. 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!visible()) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::Size(); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add space around the banner. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size(content_->GetPreferredSize()); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size.Enlarge(0, 2 * views::kRelatedControlVerticalSpacing); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return size; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_->SetBounds( 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, views::kRelatedControlVerticalSpacing, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width(), height() - views::kRelatedControlVerticalSpacing); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 164a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) virtual void ViewHierarchyChanged( 165a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const ViewHierarchyChangedDetails& details) OVERRIDE { 166a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (details.is_add && details.child == this) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Init(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Holds the info icon image and text label and renders the border. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* content_; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Info icon image. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageView* info_image_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The label responsible for rendering the text. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* label_; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(InfobarView); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, public: 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CollectedCookiesViews::CollectedCookiesViews(content::WebContents* web_contents) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : web_contents_(web_contents), 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_label_(NULL), 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_label_(NULL), 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_(NULL), 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_(NULL), 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block_allowed_button_(NULL), 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delete_allowed_button_(NULL), 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_blocked_button_(NULL), 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_session_blocked_button_(NULL), 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_info_view_(NULL), 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) infobar_(NULL), 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_changed_(false) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<TabSpecificContentSettings>(content_settings)); 20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ShowWebModalDialogViews(this, web_contents); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::DialogDelegate implementation: 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 CollectedCookiesViews::GetWindowTitle() const { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_DIALOG_TITLE); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int CollectedCookiesViews::GetDialogButtons() const { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::DIALOG_BUTTON_CANCEL; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 CollectedCookiesViews::GetDialogButtonLabel( 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DialogButton button) const { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CLOSE); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CollectedCookiesViews::Cancel() { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (status_changed_) { 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CollectedCookiesInfoBarDelegate::Create( 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService::FromWebContents(web_contents_)); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::ModalType CollectedCookiesViews::GetModalType() const { 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ui::MODAL_TYPE_CHILD; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::ButtonListener implementation: 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::ButtonPressed(views::Button* sender, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Event& event) { 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (sender == block_allowed_button_) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddContentException(allowed_cookies_tree_, CONTENT_SETTING_BLOCK); 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (sender == delete_allowed_button_) { 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) allowed_cookies_tree_model_->DeleteCookieNode( 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<CookieTreeNode*>(allowed_cookies_tree_->GetSelectedNode())); 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (sender == allow_blocked_button_) { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddContentException(blocked_cookies_tree_, CONTENT_SETTING_ALLOW); 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (sender == for_session_blocked_button_) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddContentException(blocked_cookies_tree_, CONTENT_SETTING_SESSION_ONLY); 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::TabbedPaneListener implementation: 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::TabSelectedAt(int index) { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnableControls(); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowCookieInfo(); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::TreeViewController implementation: 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::OnTreeViewSelectionChanged( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::TreeView* tree_view) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnableControls(); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowCookieInfo(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, views::View overrides: 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size CollectedCookiesViews::GetMinimumSize() const { 26968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Allow UpdateWebContentsModalDialogPosition to clamp the dialog width. 27068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return gfx::Size(0, View::GetMinimumSize().height()); 27168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 27268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 273a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void CollectedCookiesViews::ViewHierarchyChanged( 274a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const ViewHierarchyChangedDetails& details) { 275a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (details.is_add && details.child == this) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Init(); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, private: 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CollectedCookiesViews::~CollectedCookiesViews() { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetModel(NULL); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetModel(NULL); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::Init() { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using views::GridLayout; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout* layout = GridLayout::CreatePanel(this); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLayoutManager(layout); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int single_column_layout_id = 0; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, single_column_layout_id); 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::TabbedPane* tabbed_pane = new views::TabbedPane(); 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->SetInsets(gfx::Insets(kTabbedPaneTopPadding, 0, 0, 0)); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(tabbed_pane); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NOTE: Panes must be added after |tabbed_pane| has been added to its parent. 304a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 label_allowed = l10n_util::GetStringUTF16( 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_TAB_LABEL); 306a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 label_blocked = l10n_util::GetStringUTF16( 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_TAB_LABEL); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabbed_pane->AddTab(label_allowed, CreateAllowedPane()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabbed_pane->AddTab(label_blocked, CreateBlockedPane()); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabbed_pane->SelectTabAt(0); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabbed_pane->set_listener(this); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->StartRow(0, single_column_layout_id); 315ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch cookie_info_view_ = new CookieInfoView(); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(cookie_info_view_); 317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddPaddingRow(0, kCookieInfoBottomPadding); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->StartRow(0, single_column_layout_id); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) infobar_ = new InfobarView(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(infobar_); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnableControls(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowCookieInfo(); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* CollectedCookiesViews::CreateAllowedPane() { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents_); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the controls that go into the pane. 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_label_ = new views::Label(l10n_util::GetStringUTF16( 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL)); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LocalSharedObjectsContainer& allowed_data = 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->allowed_local_shared_objects(); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_model_ = allowed_data.CreateCookiesTreeModel(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_ = new views::TreeView(); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetModel(allowed_cookies_tree_model_.get()); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetRootShown(false); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetEditable(false); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->set_auto_expand_children(true); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_cookies_tree_->SetController(this); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) block_allowed_button_ = new views::LabelButton(this, 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_BLOCK_BUTTON)); 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) block_allowed_button_->SetStyle(views::Button::STYLE_BUTTON); 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delete_allowed_button_ = new views::LabelButton(this, 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_COOKIES_REMOVE_LABEL)); 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delete_allowed_button_->SetStyle(views::Button::STYLE_BUTTON); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the view that holds all the controls together. This will be the 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pane added to the tabbed pane. 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using views::GridLayout; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* pane = new views::View(); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout* layout = GridLayout::CreatePanel(pane); 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->SetInsets(kVPanelPadding, views::kButtonHEdgeMarginNew, 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kVPanelPadding, views::kButtonHEdgeMarginNew); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pane->SetLayoutManager(layout); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int single_column_layout_id = 0; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const int three_columns_layout_id = 1; 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) column_set = layout->AddColumnSet(three_columns_layout_id); 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, single_column_layout_id); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(allowed_label_); 378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddPaddingRow(0, kLabelBottomPadding); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(1, single_column_layout_id); 3812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch layout->AddView(CreateScrollView(allowed_cookies_tree_), 1, 1, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::FILL, GridLayout::FILL, kTreeViewWidth, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTreeViewHeight); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) layout->StartRow(0, three_columns_layout_id); 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) layout->AddView(block_allowed_button_); 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) layout->AddView(delete_allowed_button_); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pane; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* CollectedCookiesViews::CreateBlockedPane() { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents_); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the controls that go into the pane. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_label_ = new views::Label( 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16( 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kBlockThirdPartyCookies) ? 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED : 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL)); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_label_->SetMultiLine(true); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LocalSharedObjectsContainer& blocked_data = 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->blocked_local_shared_objects(); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_model_ = blocked_data.CreateCookiesTreeModel(); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_ = new views::TreeView(); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetModel(blocked_cookies_tree_model_.get()); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetRootShown(false); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetEditable(false); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->set_auto_expand_children(true); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked_cookies_tree_->SetController(this); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) allow_blocked_button_ = new views::LabelButton(this, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_ALLOW_BUTTON)); 4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) allow_blocked_button_->SetStyle(views::Button::STYLE_BUTTON); 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for_session_blocked_button_ = new views::LabelButton(this, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_SESSION_ONLY_BUTTON)); 4245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for_session_blocked_button_->SetStyle(views::Button::STYLE_BUTTON); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the view that holds all the controls together. This will be the 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pane added to the tabbed pane. 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using views::GridLayout; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* pane = new views::View(); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout* layout = GridLayout::CreatePanel(pane); 432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->SetInsets(kVPanelPadding, views::kButtonHEdgeMarginNew, 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kVPanelPadding, views::kButtonHEdgeMarginNew); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pane->SetLayoutManager(layout); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int single_column_layout_id = 0; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1, 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int three_columns_layout_id = 1; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set = layout->AddColumnSet(three_columns_layout_id); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, single_column_layout_id); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(blocked_label_, 1, 1, GridLayout::FILL, GridLayout::FILL); 451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddPaddingRow(0, kLabelBottomPadding); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(1, single_column_layout_id); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView( 4552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch CreateScrollView(blocked_cookies_tree_), 1, 1, 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::FILL, GridLayout::FILL, kTreeViewWidth, kTreeViewHeight); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, three_columns_layout_id); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(allow_blocked_button_); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(for_session_blocked_button_); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pane; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4662385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochviews::View* CollectedCookiesViews::CreateScrollView(views::TreeView* pane) { 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::ScrollView* scroll_view = new views::ScrollView(); 468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scroll_view->SetContents(pane); 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scroll_view->SetBorder( 470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::Border::CreateSolidBorder(1, kCookiesBorderColor)); 471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return scroll_view; 4722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 4732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::EnableControls() { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enable_allowed_buttons = false; 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TreeModelNode* node = allowed_cookies_tree_->GetSelectedNode(); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node) { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cookie_node->GetDetailedInfo().node_type == 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode::DetailedInfo::TYPE_HOST) { 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enable_allowed_buttons = static_cast<CookieTreeHostNode*>( 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_node)->CanCreateContentException(); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block_allowed_button_->SetEnabled(enable_allowed_buttons); 4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delete_allowed_button_->SetEnabled(node != NULL); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enable_blocked_buttons = false; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = blocked_cookies_tree_->GetSelectedNode(); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node) { 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cookie_node->GetDetailedInfo().node_type == 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode::DetailedInfo::TYPE_HOST) { 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enable_blocked_buttons = static_cast<CookieTreeHostNode*>( 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_node)->CanCreateContentException(); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_blocked_button_->SetEnabled(enable_blocked_buttons); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_session_blocked_button_->SetEnabled(enable_blocked_buttons); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::ShowCookieInfo() { 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TreeModelNode* node = allowed_cookies_tree_->GetSelectedNode(); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!node) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = blocked_cookies_tree_->GetSelectedNode(); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node) { 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeNode* cookie_node = static_cast<CookieTreeNode*>(node); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CookieTreeNode::DetailedInfo detailed_info = 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_node->GetDetailedInfo(); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (detailed_info.node_type == CookieTreeNode::DetailedInfo::TYPE_COOKIE) { 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_info_view_->SetCookie(detailed_info.cookie->Domain(), 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *detailed_info.cookie); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_info_view_->ClearCookieDisplay(); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_info_view_->ClearCookieDisplay(); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::AddContentException(views::TreeView* tree_view, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting) { 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieTreeHostNode* host_node = 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<CookieTreeHostNode*>(tree_view->GetSelectedNode()); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_node->CreateContentException( 5307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CookieSettings::Factory::GetForProfile(profile).get(), setting); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) infobar_->UpdateVisibility(true, setting, host_node->GetTitle()); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_changed_ = true; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CollectedCookiesViews, content::NotificationObserver implementation: 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectedCookiesViews::Observe( 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, type); 54346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetWidget()->Close(); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545