| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/views/cookie_prompt_view.h" | 5 #include "chrome/browser/views/cookie_prompt_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "app/gfx/canvas.h" | 9 #include "app/gfx/canvas.h" |
| 10 #include "app/gfx/color_utils.h" | 10 #include "app/gfx/color_utils.h" |
| 11 #include "app/l10n_util.h" | 11 #include "app/l10n_util.h" |
| 12 #include "base/i18n/time_formatting.h" | 12 #include "base/i18n/time_formatting.h" |
| 13 #include "base/message_loop.h" | 13 #include "base/message_loop.h" |
| 14 #include "base/string_util.h" | 14 #include "base/string_util.h" |
| 15 #include "chrome/browser/cookie_modal_dialog.h" |
| 15 #include "chrome/browser/profile.h" | 16 #include "chrome/browser/profile.h" |
| 16 #include "chrome/browser/views/cookie_info_view.h" | 17 #include "chrome/browser/views/cookie_info_view.h" |
| 17 #include "chrome/browser/views/local_storage_info_view.h" | 18 #include "chrome/browser/views/local_storage_info_view.h" |
| 18 #include "chrome/browser/views/options/content_settings_window_view.h" | 19 #include "chrome/browser/views/options/content_settings_window_view.h" |
| 19 #include "grit/generated_resources.h" | 20 #include "grit/generated_resources.h" |
| 20 #include "grit/locale_settings.h" | 21 #include "grit/locale_settings.h" |
| 21 #include "net/base/cookie_monster.h" | 22 #include "net/base/cookie_monster.h" |
| 22 #include "views/controls/label.h" | 23 #include "views/controls/label.h" |
| 23 #include "views/controls/button/native_button.h" | 24 #include "views/controls/button/native_button.h" |
| 24 #include "views/controls/button/radio_button.h" | 25 #include "views/controls/button/radio_button.h" |
| 25 #include "views/controls/textfield/textfield.h" | 26 #include "views/controls/textfield/textfield.h" |
| 26 #include "views/grid_layout.h" | 27 #include "views/grid_layout.h" |
| 27 #include "views/standard_layout.h" | 28 #include "views/standard_layout.h" |
| 28 #include "views/window/non_client_view.h" | 29 #include "views/window/non_client_view.h" |
| 29 | 30 |
| 30 static const int kCookiePromptViewInsetSize = 5; | 31 static const int kCookiePromptViewInsetSize = 5; |
| 31 | 32 |
| 32 /////////////////////////////////////////////////////////////////////////////// | 33 /////////////////////////////////////////////////////////////////////////////// |
| 33 // CookiesPromptView, public: | 34 // CookiePromptView, public: |
| 34 | 35 |
| 35 // static | 36 CookiePromptView::CookiePromptView( |
| 36 void CookiesPromptView::ShowCookiePromptWindow( | 37 CookiePromptModalDialog* parent, |
| 37 gfx::NativeWindow parent, | 38 gfx::NativeWindow root_window, |
| 38 Profile* profile, | 39 Profile* profile, |
| 39 const std::string& domain, | 40 const GURL& url, |
| 40 const net::CookieMonster::CanonicalCookie& cookie, | 41 const std::string& cookie_line, |
| 41 CookiesPromptViewDelegate* delegate) { | 42 CookiePromptModalDialogDelegate* delegate) |
| 42 CookiesPromptView* cookies_view = new CookiesPromptView(profile, delegate); | 43 : parent_(parent), |
| 43 cookies_view->SetCookie(domain, cookie); | 44 root_window_(root_window), |
| 44 views::Window::CreateChromeWindow(parent, | 45 profile_(profile), |
| 45 gfx::Rect(), | 46 delegate_(delegate) { |
| 46 cookies_view)->Show(); | 47 cookie_ui_ = true; |
| 48 net::CookieMonster::ParsedCookie cookie(cookie_line); |
| 49 InitializeViewResources(cookie.HasDomain() ? cookie.Domain() : url.host()); |
| 47 } | 50 } |
| 48 | 51 |
| 49 // static | 52 CookiePromptView::CookiePromptView( |
| 50 void CookiesPromptView::ShowLocalStoragePromptWindow( | 53 CookiePromptModalDialog* parent, |
| 51 gfx::NativeWindow parent, | 54 gfx::NativeWindow root_window, |
| 52 Profile* profile, | 55 Profile* profile, |
| 53 const std::string& domain, | 56 const BrowsingDataLocalStorageHelper::LocalStorageInfo& storage_info, |
| 54 const BrowsingDataLocalStorageHelper::LocalStorageInfo& local_storage_info, | 57 CookiePromptModalDialogDelegate* delegate) |
| 55 CookiesPromptViewDelegate* delegate) { | 58 : parent_(parent), |
| 56 CookiesPromptView* cookies_view = new CookiesPromptView(profile, delegate); | 59 root_window_(root_window), |
| 57 cookies_view->SetLocalStorage(domain, local_storage_info); | 60 profile_(profile), |
| 58 views::Window::CreateChromeWindow(parent, | 61 local_storage_info_(storage_info), |
| 59 gfx::Rect(), | 62 delegate_(delegate) { |
| 60 cookies_view)->Show(); | 63 cookie_ui_ = false; |
| 64 InitializeViewResources(storage_info.host); |
| 61 } | 65 } |
| 62 | 66 |
| 63 | 67 CookiePromptView::~CookiePromptView() { |
| 64 CookiesPromptView::~CookiesPromptView() { | |
| 65 } | |
| 66 | |
| 67 void CookiesPromptView::SetCookie( | |
| 68 const std::string& domain, | |
| 69 const net::CookieMonster::CanonicalCookie& cookie) { | |
| 70 cookie_ui_ = true; | |
| 71 InitializeViewResources(domain); | |
| 72 cookie_ = cookie; | |
| 73 } | |
| 74 | |
| 75 void CookiesPromptView::SetLocalStorage( | |
| 76 const std::string& domain, | |
| 77 const BrowsingDataLocalStorageHelper::LocalStorageInfo storage_info) { | |
| 78 cookie_ui_ = false; | |
| 79 InitializeViewResources(domain); | |
| 80 local_storage_info_ = storage_info; | |
| 81 } | 68 } |
| 82 | 69 |
| 83 /////////////////////////////////////////////////////////////////////////////// | 70 /////////////////////////////////////////////////////////////////////////////// |
| 84 // CookiesPromptView, views::View overrides: | 71 // CookiePromptView, views::View overrides: |
| 85 | 72 |
| 86 gfx::Size CookiesPromptView::GetPreferredSize() { | 73 gfx::Size CookiePromptView::GetPreferredSize() { |
| 87 gfx::Size client_size = views::View::GetPreferredSize(); | 74 gfx::Size client_size = views::View::GetPreferredSize(); |
| 88 return gfx::Size(client_size.width(), | 75 return gfx::Size(client_size.width(), |
| 89 client_size.height() + GetExtendedViewHeight()); | 76 client_size.height() + GetExtendedViewHeight()); |
| 90 } | 77 } |
| 91 | 78 |
| 92 | 79 |
| 93 void CookiesPromptView::ViewHierarchyChanged(bool is_add, | 80 void CookiePromptView::ViewHierarchyChanged(bool is_add, |
| 94 views::View* parent, | 81 views::View* parent, |
| 95 views::View* child) { | 82 views::View* child) { |
| 96 if (is_add && child == this) | 83 if (is_add && child == this) |
| 97 Init(); | 84 Init(); |
| 98 } | 85 } |
| 99 | 86 |
| 100 /////////////////////////////////////////////////////////////////////////////// | 87 /////////////////////////////////////////////////////////////////////////////// |
| 101 // CookiesPromptView, views::DialogDelegate implementation: | 88 // CookiePromptView, ModalDialogDelegate implementation: |
| 102 | 89 |
| 103 std::wstring CookiesPromptView::GetWindowTitle() const { | 90 gfx::NativeWindow CookiePromptView::GetDialogRootWindow() { |
| 91 return root_window_; |
| 92 } |
| 93 |
| 94 /////////////////////////////////////////////////////////////////////////////// |
| 95 // CookiePromptView, views::DialogDelegate implementation: |
| 96 |
| 97 std::wstring CookiePromptView::GetWindowTitle() const { |
| 104 return title_; | 98 return title_; |
| 105 } | 99 } |
| 106 | 100 |
| 107 void CookiesPromptView::WindowClosing() { | 101 void CookiePromptView::WindowClosing() { |
| 108 if (!signaled_ && delegate_) | 102 if (!signaled_ && delegate_) |
| 109 delegate_->BlockSiteData(false); | 103 delegate_->BlockSiteData(false); |
| 104 parent_->CompleteDialog(); |
| 110 } | 105 } |
| 111 | 106 |
| 112 views::View* CookiesPromptView::GetContentsView() { | 107 views::View* CookiePromptView::GetContentsView() { |
| 113 return this; | 108 return this; |
| 114 } | 109 } |
| 115 | 110 |
| 116 // CookieInfoViewDelegate overrides: | 111 // CookieInfoViewDelegate overrides: |
| 117 void CookiesPromptView::ModifyExpireDate(bool session_expire) { | 112 void CookiePromptView::ModifyExpireDate(bool session_expire) { |
| 118 session_expire_ = session_expire; | 113 session_expire_ = session_expire; |
| 119 } | 114 } |
| 120 | 115 |
| 121 | 116 |
| 122 /////////////////////////////////////////////////////////////////////////////// | 117 /////////////////////////////////////////////////////////////////////////////// |
| 123 // CookiesPromptView, views::ButtonListener implementation: | 118 // CookiePromptView, views::ButtonListener implementation: |
| 124 | 119 |
| 125 void CookiesPromptView::ButtonPressed(views::Button* sender, | 120 void CookiePromptView::ButtonPressed(views::Button* sender, |
| 126 const views::Event& event) { | 121 const views::Event& event) { |
| 127 if (sender == allow_button_) { | 122 if (sender == allow_button_) { |
| 128 if (delegate_) { | 123 if (delegate_) { |
| 129 delegate_->AllowSiteData(remember_radio_->checked(), session_expire_); | 124 delegate_->AllowSiteData(remember_radio_->checked(), session_expire_); |
| 130 signaled_ = true; | 125 signaled_ = true; |
| 131 } | 126 } |
| 132 GetWindow()->Close(); | 127 GetWindow()->Close(); |
| 133 } else if (sender == block_button_) { | 128 } else if (sender == block_button_) { |
| 134 if (delegate_) { | 129 if (delegate_) { |
| 135 delegate_->BlockSiteData(remember_radio_->checked()); | 130 delegate_->BlockSiteData(remember_radio_->checked()); |
| 136 signaled_ = true; | 131 signaled_ = true; |
| 137 } | 132 } |
| 138 GetWindow()->Close(); | 133 GetWindow()->Close(); |
| 139 } | 134 } |
| 140 } | 135 } |
| 141 | 136 |
| 142 /////////////////////////////////////////////////////////////////////////////// | 137 /////////////////////////////////////////////////////////////////////////////// |
| 143 // CookiesPromptView, views::LinkController implementation: | 138 // CookiePromptView, views::LinkController implementation: |
| 144 void CookiesPromptView::LinkActivated(views::Link* source, int event_flags) { | 139 void CookiePromptView::LinkActivated(views::Link* source, int event_flags) { |
| 145 if (source == show_cookie_link_) | 140 if (source == show_cookie_link_) |
| 146 ToggleDetailsViewExpand(); | 141 ToggleDetailsViewExpand(); |
| 147 else if (source == manage_cookies_link_) | 142 else if (source == manage_cookies_link_) |
| 148 ContentSettingsWindowView::Show(CONTENT_SETTINGS_TYPE_COOKIES, profile_); | 143 ContentSettingsWindowView::Show(CONTENT_SETTINGS_TYPE_COOKIES, profile_); |
| 149 else | 144 else |
| 150 NOTREACHED(); | 145 NOTREACHED(); |
| 151 } | 146 } |
| 152 | 147 |
| 153 /////////////////////////////////////////////////////////////////////////////// | 148 /////////////////////////////////////////////////////////////////////////////// |
| 154 // CookiesPromptView, private: | 149 // CookiePromptView, private: |
| 155 | 150 |
| 156 CookiesPromptView::CookiesPromptView(Profile* profile, | 151 CookiePromptView::CookiePromptView(Profile* profile, |
| 157 CookiesPromptViewDelegate* delegate) | 152 CookiePromptModalDialogDelegate* delegate) |
| 158 : remember_radio_(NULL), | 153 : remember_radio_(NULL), |
| 159 ask_radio_(NULL), | 154 ask_radio_(NULL), |
| 160 allow_button_(NULL), | 155 allow_button_(NULL), |
| 161 block_button_(NULL), | 156 block_button_(NULL), |
| 162 show_cookie_link_(NULL), | 157 show_cookie_link_(NULL), |
| 163 manage_cookies_link_(NULL), | 158 manage_cookies_link_(NULL), |
| 164 info_view_(NULL), | 159 info_view_(NULL), |
| 165 session_expire_(false), | 160 session_expire_(false), |
| 166 expanded_view_(false), | 161 expanded_view_(false), |
| 167 signaled_(false), | 162 signaled_(false), |
| 168 delegate_(delegate), | 163 delegate_(delegate), |
| 169 profile_(profile) { | 164 profile_(profile) { |
| 170 } | 165 } |
| 171 | 166 |
| 172 void CookiesPromptView::Init() { | 167 void CookiePromptView::Init() { |
| 173 views::Label* description_label = new views::Label(l10n_util::GetStringF( | 168 views::Label* description_label = new views::Label(l10n_util::GetStringF( |
| 174 cookie_ui_ ? IDS_COOKIE_ALERT_LABEL : IDS_DATA_ALERT_LABEL, | 169 cookie_ui_ ? IDS_COOKIE_ALERT_LABEL : IDS_DATA_ALERT_LABEL, |
| 175 display_domain_)); | 170 display_domain_)); |
| 176 int radio_group_id = 0; | 171 int radio_group_id = 0; |
| 177 remember_radio_ = new views::RadioButton( | 172 remember_radio_ = new views::RadioButton( |
| 178 l10n_util::GetStringF(IDS_COOKIE_ALERT_REMEMBER_RADIO, display_domain_), | 173 l10n_util::GetStringF(IDS_COOKIE_ALERT_REMEMBER_RADIO, display_domain_), |
| 179 radio_group_id); | 174 radio_group_id); |
| 180 remember_radio_->set_listener(this); | 175 remember_radio_->set_listener(this); |
| 181 ask_radio_ = new views::RadioButton( | 176 ask_radio_ = new views::RadioButton( |
| 182 l10n_util::GetString(IDS_COOKIE_ALERT_ASK_RADIO), radio_group_id); | 177 l10n_util::GetString(IDS_COOKIE_ALERT_ASK_RADIO), radio_group_id); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 GridLayout::TRAILING, GridLayout::CENTER); | 255 GridLayout::TRAILING, GridLayout::CENTER); |
| 261 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); | 256 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); |
| 262 | 257 |
| 263 layout->StartRow(0, one_column_layout_id); | 258 layout->StartRow(0, one_column_layout_id); |
| 264 | 259 |
| 265 if (cookie_ui_) { | 260 if (cookie_ui_) { |
| 266 CookieInfoView* cookie_info_view = new CookieInfoView(true); | 261 CookieInfoView* cookie_info_view = new CookieInfoView(true); |
| 267 cookie_info_view->set_delegate(this); | 262 cookie_info_view->set_delegate(this); |
| 268 layout->AddView(cookie_info_view, 1, 1, GridLayout::FILL, | 263 layout->AddView(cookie_info_view, 1, 1, GridLayout::FILL, |
| 269 GridLayout::CENTER); | 264 GridLayout::CENTER); |
| 270 cookie_info_view->SetCookie(domain_, cookie_); | 265 |
| 266 cookie_info_view->SetCookieString(domain_, cookie_line_); |
| 271 info_view_ = cookie_info_view; | 267 info_view_ = cookie_info_view; |
| 272 } else { | 268 } else { |
| 273 LocalStorageInfoView* local_storage_info_view = new LocalStorageInfoView(); | 269 LocalStorageInfoView* local_storage_info_view = new LocalStorageInfoView(); |
| 274 layout->AddView(local_storage_info_view, 1, 1, GridLayout::FILL, | 270 layout->AddView(local_storage_info_view, 1, 1, GridLayout::FILL, |
| 275 GridLayout::CENTER); | 271 GridLayout::CENTER); |
| 276 local_storage_info_view->SetLocalStorageInfo(local_storage_info_); | 272 local_storage_info_view->SetLocalStorageInfo(local_storage_info_); |
| 277 info_view_ = local_storage_info_view; | 273 info_view_ = local_storage_info_view; |
| 278 } | 274 } |
| 279 info_view_->SetVisible(false); | 275 info_view_->SetVisible(false); |
| 280 | 276 |
| 281 // Set default values. | 277 // Set default values. |
| 282 ask_radio_->SetChecked(true); | 278 ask_radio_->SetChecked(true); |
| 283 } | 279 } |
| 284 | 280 |
| 285 int CookiesPromptView::GetExtendedViewHeight() { | 281 int CookiePromptView::GetExtendedViewHeight() { |
| 286 DCHECK(info_view_); | 282 DCHECK(info_view_); |
| 287 return expanded_view_ ? | 283 return expanded_view_ ? |
| 288 kRelatedControlVerticalSpacing : -info_view_->GetPreferredSize().height(); | 284 kRelatedControlVerticalSpacing : -info_view_->GetPreferredSize().height(); |
| 289 } | 285 } |
| 290 | 286 |
| 291 void CookiesPromptView::ToggleDetailsViewExpand() { | 287 void CookiePromptView::ToggleDetailsViewExpand() { |
| 292 expanded_view_ = !expanded_view_; | 288 expanded_view_ = !expanded_view_; |
| 293 views::Window* parent = GetWindow(); | 289 views::Window* parent = GetWindow(); |
| 294 gfx::Size non_client_size = parent->GetNonClientView()->GetPreferredSize(); | 290 gfx::Size non_client_size = parent->GetNonClientView()->GetPreferredSize(); |
| 295 gfx::Rect bounds = parent->GetBounds(); | 291 gfx::Rect bounds = parent->GetBounds(); |
| 296 bounds.set_height(non_client_size.height() + GetExtendedViewHeight()); | 292 bounds.set_height(non_client_size.height() + GetExtendedViewHeight()); |
| 297 parent->SetBounds(bounds, NULL); | 293 parent->SetBounds(bounds, NULL); |
| 298 | 294 |
| 299 info_view_->SetVisible(expanded_view_); | 295 info_view_->SetVisible(expanded_view_); |
| 300 Layout(); | 296 Layout(); |
| 301 } | 297 } |
| 302 | 298 |
| 303 void CookiesPromptView::InitializeViewResources(const std::string& domain) { | 299 void CookiePromptView::InitializeViewResources(const std::string& domain) { |
| 304 domain_ = domain; | 300 domain_ = domain; |
| 305 std::string display_domain = domain; | 301 std::string display_domain = domain; |
| 306 if (!domain.empty() && domain[0] == '.') | 302 if (!domain.empty() && domain[0] == '.') |
| 307 display_domain = display_domain.substr(1); | 303 display_domain = display_domain.substr(1); |
| 308 display_domain_ = UTF8ToWide(display_domain); | 304 display_domain_ = UTF8ToWide(display_domain); |
| 309 title_ = l10n_util::GetStringF( | 305 title_ = l10n_util::GetStringF( |
| 310 cookie_ui_ ? IDS_COOKIE_ALERT_TITLE : IDS_DATA_ALERT_TITLE, | 306 cookie_ui_ ? IDS_COOKIE_ALERT_TITLE : IDS_DATA_ALERT_TITLE, |
| 311 display_domain_); | 307 display_domain_); |
| 312 } | 308 } |
| 313 | 309 |
| OLD | NEW |