summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-12 21:38:56 +0000
committerjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-12 21:38:56 +0000
commit8f53962c5743fe97d0c0dd547b5e056a7a68c196 (patch)
treec680ea6d31cb9c518ac9e911e699569abb18b9f4
parent0586b0e71d0b79511d8acbab2e7dedd41c830867 (diff)
downloadchromium_src-8f53962c5743fe97d0c0dd547b5e056a7a68c196.zip
chromium_src-8f53962c5743fe97d0c0dd547b5e056a7a68c196.tar.gz
chromium_src-8f53962c5743fe97d0c0dd547b5e056a7a68c196.tar.bz2
Make the setItem CONTENT_SETTING_ASK dialog more useful by showing the actual key and value. Unfortunately, we're going to have to abuse cookie strings for 4.1 Once this goes in, I'll add new strings for the actual fields.
This also cleans up the code some. TEST=Instead of size/modified information you'll see "name" and "content" in the dialog that comes up when asking whether to allow local storage. BUG=none Review URL: http://codereview.chromium.org/597061 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38952 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/cookie_modal_dialog.cc16
-rw-r--r--chrome/browser/cookie_modal_dialog.h36
-rw-r--r--chrome/browser/cookie_modal_dialog_views.cc5
-rw-r--r--chrome/browser/in_process_webkit/dom_storage_area.cc40
-rw-r--r--chrome/browser/in_process_webkit/dom_storage_area.h4
-rw-r--r--chrome/browser/in_process_webkit/dom_storage_permission_request.cc22
-rw-r--r--chrome/browser/in_process_webkit/dom_storage_permission_request.h21
-rw-r--r--chrome/browser/message_box_handler.cc10
-rw-r--r--chrome/browser/message_box_handler.h7
-rw-r--r--chrome/browser/net/chrome_cookie_policy.cc2
-rw-r--r--chrome/browser/views/cookie_prompt_view.cc62
-rw-r--r--chrome/browser/views/cookie_prompt_view.h30
-rwxr-xr-xchrome/browser/views/local_storage_set_item_info_view.cc130
-rwxr-xr-xchrome/browser/views/local_storage_set_item_info_view.h60
-rwxr-xr-xchrome/chrome_browser.gypi2
15 files changed, 298 insertions, 149 deletions
diff --git a/chrome/browser/cookie_modal_dialog.cc b/chrome/browser/cookie_modal_dialog.cc
index 5bd46fa..496843c 100644
--- a/chrome/browser/cookie_modal_dialog.cc
+++ b/chrome/browser/cookie_modal_dialog.cc
@@ -10,24 +10,28 @@
CookiePromptModalDialog::CookiePromptModalDialog(
TabContents* tab_contents,
- const std::string& host,
+ const GURL& origin,
const std::string& cookie_line,
CookiePromptModalDialogDelegate* delegate)
: AppModalDialog(tab_contents, std::wstring()),
- host_(host),
+ dialog_type_(DIALOG_TYPE_COOKIE),
+ origin_(origin),
cookie_line_(cookie_line),
- cookie_ui_(true),
delegate_(delegate) {
}
CookiePromptModalDialog::CookiePromptModalDialog(
TabContents* tab_contents,
- const BrowsingDataLocalStorageHelper::LocalStorageInfo& storage_info,
+ const GURL& origin,
+ const string16& key,
+ const string16& value,
CookiePromptModalDialogDelegate* delegate)
: AppModalDialog(tab_contents, std::wstring()),
- storage_info_(storage_info),
- cookie_ui_(false),
+ dialog_type_(DIALOG_TYPE_LOCAL_STORAGE),
+ origin_(origin),
+ local_storage_key_(key),
+ local_storage_value_(value),
delegate_(delegate) {
}
diff --git a/chrome/browser/cookie_modal_dialog.h b/chrome/browser/cookie_modal_dialog.h
index d36bb93..f704bad 100644
--- a/chrome/browser/cookie_modal_dialog.h
+++ b/chrome/browser/cookie_modal_dialog.h
@@ -18,15 +18,24 @@ class PrefService;
// |NativeDialog| is a platform specific view.
class CookiePromptModalDialog : public AppModalDialog {
public:
+ enum DialogType {
+ DIALOG_TYPE_COOKIE = 0,
+ DIALOG_TYPE_LOCAL_STORAGE
+ // TODO(jorlow): Database
+ // TODO(michaeln): AppCache
+ };
+
// A union of data necessary to determine the type of message box to
// show.
CookiePromptModalDialog(TabContents* tab_contents,
- const std::string& host,
+ const GURL& origin,
const std::string& cookie_line,
CookiePromptModalDialogDelegate* delegate);
CookiePromptModalDialog(
TabContents* tab_contents,
- const BrowsingDataLocalStorageHelper::LocalStorageInfo& storage_info,
+ const GURL& origin,
+ const string16& key,
+ const string16& value,
CookiePromptModalDialogDelegate* delegate);
virtual ~CookiePromptModalDialog() {}
@@ -37,6 +46,13 @@ class CookiePromptModalDialog : public AppModalDialog {
virtual void AcceptWindow();
virtual void CancelWindow();
+ DialogType dialog_type() const { return dialog_type_; }
+ const GURL& origin() const { return origin_; }
+ const std::string& cookie_line() const { return cookie_line_; }
+ const string16& local_storage_key() const { return local_storage_key_; }
+ const string16& local_storage_value() const { return local_storage_value_; }
+ CookiePromptModalDialogDelegate* GetDelegate() { return delegate_; }
+
protected:
// AppModalDialog overrides.
virtual NativeDialog CreateNativeDialog();
@@ -45,17 +61,17 @@ class CookiePromptModalDialog : public AppModalDialog {
#endif
private:
- // Cookie host.
- std::string host_;
+ const DialogType dialog_type_;
- // Cookie to display.
- std::string cookie_line_;
+ // The origin connected to this request.
+ GURL origin_;
- // Local storage info to display.
- BrowsingDataLocalStorageHelper::LocalStorageInfo storage_info_;
+ // Cookie to display.
+ const std::string cookie_line_;
- // Whether we're showing cookie UI as opposed to other site data.
- bool cookie_ui_;
+ // LocalStorage key/value.
+ const string16 local_storage_key_;
+ const string16 local_storage_value_;
// Delegate. The caller should provide one in order to receive results
// from this delegate.
diff --git a/chrome/browser/cookie_modal_dialog_views.cc b/chrome/browser/cookie_modal_dialog_views.cc
index 6e9027a..c8930c1 100644
--- a/chrome/browser/cookie_modal_dialog_views.cc
+++ b/chrome/browser/cookie_modal_dialog_views.cc
@@ -41,10 +41,7 @@ NativeDialog CookiePromptModalDialog::CreateNativeDialog() {
#if defined(OS_WIN)
return new CookiePromptView(this,
tab_contents_->GetMessageBoxRootWindow(),
- tab_contents_->profile(),
- storage_info_,
- host_, cookie_line_, delegate_,
- cookie_ui_);
+ tab_contents_->profile());
#else
return NULL;
#endif
diff --git a/chrome/browser/in_process_webkit/dom_storage_area.cc b/chrome/browser/in_process_webkit/dom_storage_area.cc
index fc9bf80..99f24c6 100644
--- a/chrome/browser/in_process_webkit/dom_storage_area.cc
+++ b/chrome/browser/in_process_webkit/dom_storage_area.cc
@@ -42,32 +42,23 @@ DOMStorageArea::~DOMStorageArea() {
}
unsigned DOMStorageArea::Length() {
- if (!CheckContentSetting())
- return 0; // Pretend we're an empty store.
-
CreateWebStorageAreaIfNecessary();
return storage_area_->length();
}
NullableString16 DOMStorageArea::Key(unsigned index) {
- if (!CheckContentSetting())
- return NullableString16(true); // Null string.
-
CreateWebStorageAreaIfNecessary();
return storage_area_->key(index);
}
NullableString16 DOMStorageArea::GetItem(const string16& key) {
- if (!CheckContentSetting())
- return NullableString16(true); // Null string.
-
CreateWebStorageAreaIfNecessary();
return storage_area_->getItem(key);
}
NullableString16 DOMStorageArea::SetItem(
const string16& key, const string16& value, bool* quota_exception) {
- if (!CheckContentSetting()) {
+ if (!CheckContentSetting(key, value)) {
*quota_exception = true;
return NullableString16(true); // Ignored if exception is true.
}
@@ -79,9 +70,6 @@ NullableString16 DOMStorageArea::SetItem(
}
NullableString16 DOMStorageArea::RemoveItem(const string16& key) {
- if (!CheckContentSetting())
- return NullableString16(true); // Indicates nothing removed.
-
CreateWebStorageAreaIfNecessary();
WebString old_value;
storage_area_->removeItem(key, WebURL(), old_value);
@@ -89,9 +77,6 @@ NullableString16 DOMStorageArea::RemoveItem(const string16& key) {
}
bool DOMStorageArea::Clear() {
- if (!CheckContentSetting())
- return false; // Nothing cleared.
-
CreateWebStorageAreaIfNecessary();
bool somethingCleared;
storage_area_->clear(WebURL(), somethingCleared);
@@ -107,31 +92,14 @@ void DOMStorageArea::CreateWebStorageAreaIfNecessary() {
storage_area_.reset(owner_->CreateWebStorageArea(origin_));
}
-bool DOMStorageArea::CheckContentSetting() {
+bool DOMStorageArea::CheckContentSetting(const string16& key,
+ const string16& value) {
ContentSetting content_setting =
host_content_settings_map_->GetContentSetting(
origin_url_, CONTENT_SETTINGS_TYPE_COOKIES);
if (content_setting == CONTENT_SETTING_ASK) {
- WebSecurityOrigin security_origin(
- WebSecurityOrigin::createFromString(origin_));
- FilePath::StringType file_name = webkit_glue::WebStringToFilePath(
- security_origin.databaseIdentifier()).value();
- file_name.append(DOMStorageContext::kLocalStorageExtension);
- FilePath file_path = webkit_glue::WebStringToFilePath(
- owner_->data_dir_path()).Append(file_name);
-
- bool file_exists = false;
- int64 size = 0;
- base::Time last_modified;
- file_util::FileInfo file_info;
- if (file_util::GetFileInfo(file_path, &file_info)) {
- file_exists = true;
- size = file_info.size;
- last_modified = file_info.last_modified;
- }
- DOMStoragePermissionRequest request(origin_url_, file_exists, size,
- last_modified,
+ DOMStoragePermissionRequest request(origin_url_, key, value,
host_content_settings_map_);
ChromeThread::PostTask(
ChromeThread::UI, FROM_HERE,
diff --git a/chrome/browser/in_process_webkit/dom_storage_area.h b/chrome/browser/in_process_webkit/dom_storage_area.h
index 4afc731..01c068c 100644
--- a/chrome/browser/in_process_webkit/dom_storage_area.h
+++ b/chrome/browser/in_process_webkit/dom_storage_area.h
@@ -38,7 +38,6 @@ class DOMStorageArea {
NullableString16 RemoveItem(const string16& key);
bool Clear();
void PurgeMemory();
- bool CheckContentSetting();
int64 id() const { return id_; }
@@ -46,6 +45,9 @@ class DOMStorageArea {
// Creates the underlying WebStorageArea on demand.
void CreateWebStorageAreaIfNecessary();
+ // Used to see if setItem has permission to do its thing.
+ bool CheckContentSetting(const string16& key, const string16& value);
+
// The origin this storage area represents.
string16 origin_;
GURL origin_url_;
diff --git a/chrome/browser/in_process_webkit/dom_storage_permission_request.cc b/chrome/browser/in_process_webkit/dom_storage_permission_request.cc
index 4fb3293..6970cc9b 100644
--- a/chrome/browser/in_process_webkit/dom_storage_permission_request.cc
+++ b/chrome/browser/in_process_webkit/dom_storage_permission_request.cc
@@ -9,14 +9,12 @@
DOMStoragePermissionRequest::DOMStoragePermissionRequest(
const GURL& url,
- bool file_exists,
- int64 size,
- base::Time last_modified,
+ const string16& key,
+ const string16& value,
HostContentSettingsMap* settings)
: url_(url),
- file_exists_(file_exists),
- size_(size),
- last_modified_(last_modified),
+ key_(key),
+ value_(value),
event_(true, false), // manual reset, not initially signaled
host_content_settings_map_(settings) {
}
@@ -62,15 +60,9 @@ void DOMStoragePermissionRequest::PromptUser(
// showed the name and value being stored (as is done for cookies).
const std::string& host = dom_storage_permission_request->url().host();
RunLocalStoragePrompt(browser->GetSelectedTabContents(),
- BrowsingDataLocalStorageHelper::LocalStorageInfo(
- std::string(),
- host,
- -1,
- std::string(),
- host,
- FilePath(),
- dom_storage_permission_request->size(),
- dom_storage_permission_request->last_modified()),
+ dom_storage_permission_request->url(),
+ dom_storage_permission_request->key(),
+ dom_storage_permission_request->value(),
dom_storage_permission_request);
#else
// TODO(darin): Enable prompting for other ports.
diff --git a/chrome/browser/in_process_webkit/dom_storage_permission_request.h b/chrome/browser/in_process_webkit/dom_storage_permission_request.h
index 3b94177..3d0d81f 100644
--- a/chrome/browser/in_process_webkit/dom_storage_permission_request.h
+++ b/chrome/browser/in_process_webkit/dom_storage_permission_request.h
@@ -20,9 +20,8 @@
class DOMStoragePermissionRequest : public CookiePromptModalDialogDelegate {
public:
DOMStoragePermissionRequest(const GURL& url,
- bool file_exists,
- int64 size,
- base::Time last_modified,
+ const string16& key,
+ const string16& value,
HostContentSettingsMap* settings);
@@ -30,9 +29,8 @@ class DOMStoragePermissionRequest : public CookiePromptModalDialogDelegate {
void SendResponse(ContentSetting content_setting, bool remember);
const GURL& url() const { return url_; }
- bool file_exists() const { return file_exists_; }
- int64 size() const { return size_; }
- const base::Time last_modified() const { return last_modified_; }
+ const string16& key() const { return key_; }
+ const string16& value() const { return value_; }
// Called on the UI thread.
static void PromptUser(DOMStoragePermissionRequest* request);
@@ -45,14 +43,11 @@ class DOMStoragePermissionRequest : public CookiePromptModalDialogDelegate {
// The URL we need to get permission for.
const GURL url_;
- // Is there any information on disk currently?
- bool file_exists_;
+ // The key we're trying to set.
+ const string16 key_;
- // If file_exists_, what's the size?
- int64 size_;
-
- // If file_exists_, what's the size?
- const base::Time last_modified_;
+ // The value we're trying to set.
+ const string16 value_;
// The response to the permission request.
ContentSetting response_content_setting_;
diff --git a/chrome/browser/message_box_handler.cc b/chrome/browser/message_box_handler.cc
index b1c33a7..4a2d19f 100644
--- a/chrome/browser/message_box_handler.cc
+++ b/chrome/browser/message_box_handler.cc
@@ -60,20 +60,22 @@ void RunBeforeUnloadDialog(TabContents* tab_contents,
#if defined(OS_WIN)
void RunCookiePrompt(TabContents* tab_contents,
- const std::string& host,
+ const GURL& origin,
const std::string& cookie_line,
CookiePromptModalDialogDelegate* delegate) {
Singleton<AppModalDialogQueue>()->AddDialog(
- new CookiePromptModalDialog(tab_contents, host, cookie_line, delegate));
+ new CookiePromptModalDialog(tab_contents, origin, cookie_line, delegate));
}
void RunLocalStoragePrompt(
TabContents* tab_contents,
- const BrowsingDataLocalStorageHelper::LocalStorageInfo& local_storage_info,
+ const GURL& origin,
+ const string16& key,
+ const string16& value,
CookiePromptModalDialogDelegate* delegate) {
Singleton<AppModalDialogQueue>()->AddDialog(
- new CookiePromptModalDialog(tab_contents, local_storage_info, delegate));
+ new CookiePromptModalDialog(tab_contents, origin, key, value, delegate));
}
#endif
diff --git a/chrome/browser/message_box_handler.h b/chrome/browser/message_box_handler.h
index 04df1f8..7b16c35 100644
--- a/chrome/browser/message_box_handler.h
+++ b/chrome/browser/message_box_handler.h
@@ -7,6 +7,7 @@
#include <string>
+#include "base/string16.h"
#include "chrome/browser/browsing_data_local_storage_helper.h"
#include "googleurl/src/gurl.h"
#include "ipc/ipc_message.h"
@@ -45,7 +46,7 @@ void RunBeforeUnloadDialog(TabContents* tab_contents,
// user to accept or reject the cookie. The caller should pass |delegate|
// that will handle the reply from the dialog.
void RunCookiePrompt(TabContents* tab_contents,
- const std::string& host,
+ const GURL& origin,
const std::string& cookie_line,
CookiePromptModalDialogDelegate* delegate);
@@ -54,7 +55,9 @@ void RunCookiePrompt(TabContents* tab_contents,
// that will handle the reply from the dialog.
void RunLocalStoragePrompt(
TabContents* tab_contents,
- const BrowsingDataLocalStorageHelper::LocalStorageInfo& local_storage_info,
+ const GURL& origin,
+ const string16& key,
+ const string16& value,
CookiePromptModalDialogDelegate* delegate);
#endif
diff --git a/chrome/browser/net/chrome_cookie_policy.cc b/chrome/browser/net/chrome_cookie_policy.cc
index 848ce28..6646af3 100644
--- a/chrome/browser/net/chrome_cookie_policy.cc
+++ b/chrome/browser/net/chrome_cookie_policy.cc
@@ -163,7 +163,7 @@ void ChromeCookiePolicy::ShowNextPrompt() {
}
#if defined(OS_WIN)
- RunCookiePrompt(browser->GetSelectedTabContents(), host, data.cookie_line,
+ RunCookiePrompt(browser->GetSelectedTabContents(), data.url, data.cookie_line,
new PromptDelegate(this, host));
#else
// TODO(darin): Enable prompting for other ports.
diff --git a/chrome/browser/views/cookie_prompt_view.cc b/chrome/browser/views/cookie_prompt_view.cc
index cc0430f..dd2425e 100644
--- a/chrome/browser/views/cookie_prompt_view.cc
+++ b/chrome/browser/views/cookie_prompt_view.cc
@@ -17,7 +17,7 @@
#include "chrome/browser/profile.h"
#include "chrome/browser/views/browser_dialogs.h"
#include "chrome/browser/views/cookie_info_view.h"
-#include "chrome/browser/views/local_storage_info_view.h"
+#include "chrome/browser/views/local_storage_set_item_info_view.h"
#include "chrome/browser/views/options/content_settings_window_view.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
@@ -40,12 +40,7 @@ static const int kCookiePromptViewInsetSize = 5;
CookiePromptView::CookiePromptView(
CookiePromptModalDialog* parent,
gfx::NativeWindow root_window,
- Profile* profile,
- const BrowsingDataLocalStorageHelper::LocalStorageInfo& storage_info,
- const std::string& host,
- const std::string& cookie_line,
- CookiePromptModalDialogDelegate* delegate,
- bool cookie_ui)
+ Profile* profile)
: remember_radio_(NULL),
ask_radio_(NULL),
allow_button_(NULL),
@@ -55,14 +50,9 @@ CookiePromptView::CookiePromptView(
session_expire_(false),
expanded_view_(false),
signaled_(false),
- cookie_ui_(cookie_ui),
parent_(parent),
- root_window_(root_window),
- host_(host),
- cookie_line_(cookie_line),
- local_storage_info_(storage_info),
- delegate_(delegate) {
- InitializeViewResources(host);
+ root_window_(root_window) {
+ InitializeViewResources(parent_->origin().host());
expanded_view_ = g_browser_process->local_state()->
GetBoolean(prefs::kCookiePromptExpanded);
}
@@ -102,8 +92,8 @@ std::wstring CookiePromptView::GetWindowTitle() const {
}
void CookiePromptView::WindowClosing() {
- if (!signaled_ && delegate_)
- delegate_->BlockSiteData(false);
+ if (!signaled_ && parent_->GetDelegate())
+ parent_->GetDelegate()->BlockSiteData(false);
parent_->CompleteDialog();
}
@@ -123,14 +113,15 @@ void CookiePromptView::ModifyExpireDate(bool session_expire) {
void CookiePromptView::ButtonPressed(views::Button* sender,
const views::Event& event) {
if (sender == allow_button_) {
- if (delegate_) {
- delegate_->AllowSiteData(remember_radio_->checked(), session_expire_);
+ if (parent_->GetDelegate()) {
+ parent_->GetDelegate()->AllowSiteData(remember_radio_->checked(),
+ session_expire_);
signaled_ = true;
}
GetWindow()->Close();
} else if (sender == block_button_) {
- if (delegate_) {
- delegate_->BlockSiteData(remember_radio_->checked());
+ if (parent_->GetDelegate()) {
+ parent_->GetDelegate()->BlockSiteData(remember_radio_->checked());
signaled_ = true;
}
GetWindow()->Close();
@@ -148,9 +139,11 @@ void CookiePromptView::LinkActivated(views::Link* source, int event_flags) {
// CookiePromptView, private:
void CookiePromptView::Init() {
- std::wstring display_host = UTF8ToWide(host_);
+ CookiePromptModalDialog::DialogType type = parent_->dialog_type();
+ std::wstring display_host = UTF8ToWide(parent_->origin().host());
views::Label* description_label = new views::Label(l10n_util::GetStringF(
- cookie_ui_ ? IDS_COOKIE_ALERT_LABEL : IDS_DATA_ALERT_LABEL,
+ type == CookiePromptModalDialog::DIALOG_TYPE_COOKIE ?
+ IDS_COOKIE_ALERT_LABEL : IDS_DATA_ALERT_LABEL,
display_host));
int radio_group_id = 0;
remember_radio_ = new views::RadioButton(
@@ -236,20 +229,23 @@ void CookiePromptView::Init() {
layout->StartRow(0, one_column_layout_id);
- if (cookie_ui_) {
+ if (type == CookiePromptModalDialog::DIALOG_TYPE_COOKIE) {
CookieInfoView* cookie_info_view = new CookieInfoView(true);
cookie_info_view->set_delegate(this);
layout->AddView(cookie_info_view, 1, 1, GridLayout::FILL,
GridLayout::CENTER);
- cookie_info_view->SetCookieString(host_, cookie_line_);
+ cookie_info_view->SetCookieString(parent_->origin().host(), parent_->cookie_line());
info_view_ = cookie_info_view;
+ } else if (type == CookiePromptModalDialog::DIALOG_TYPE_LOCAL_STORAGE) {
+ LocalStorageSetItemInfoView* view = new LocalStorageSetItemInfoView();
+ layout->AddView(view, 1, 1, GridLayout::FILL, GridLayout::CENTER);
+ view->SetFields(parent_->origin().host(),
+ parent_->local_storage_key(),
+ parent_->local_storage_value());
+ info_view_ = view;
} else {
- LocalStorageInfoView* local_storage_info_view = new LocalStorageInfoView();
- layout->AddView(local_storage_info_view, 1, 1, GridLayout::FILL,
- GridLayout::CENTER);
- local_storage_info_view->SetLocalStorageInfo(local_storage_info_);
- info_view_ = local_storage_info_view;
+ NOTIMPLEMENTED();
}
info_view_->SetVisible(expanded_view_);
@@ -284,9 +280,11 @@ void CookiePromptView::ToggleDetailsViewExpand() {
void CookiePromptView::InitializeViewResources(const std::string& host) {
DCHECK(host.empty() || host[0] != '.');
- host_ = host;
+ DCHECK(host == parent_->origin().host());
+ CookiePromptModalDialog::DialogType type = parent_->dialog_type();
title_ = l10n_util::GetStringF(
- cookie_ui_ ? IDS_COOKIE_ALERT_TITLE : IDS_DATA_ALERT_TITLE,
- UTF8ToWide(host_));
+ type == CookiePromptModalDialog::DIALOG_TYPE_COOKIE ?
+ IDS_COOKIE_ALERT_TITLE : IDS_DATA_ALERT_TITLE,
+ UTF8ToWide(parent_->origin().host()));
}
diff --git a/chrome/browser/views/cookie_prompt_view.h b/chrome/browser/views/cookie_prompt_view.h
index 5f1e400..daeb2b4 100644
--- a/chrome/browser/views/cookie_prompt_view.h
+++ b/chrome/browser/views/cookie_prompt_view.h
@@ -32,21 +32,15 @@ class Timer;
// Cookie alert dialog UI.
class CookiePromptView : public views::View,
- public ModalDialogDelegate,
- public views::ButtonListener,
- public views::LinkController,
- public CookieInfoViewDelegate {
+ public ModalDialogDelegate,
+ public views::ButtonListener,
+ public views::LinkController,
+ public CookieInfoViewDelegate {
public:
CookiePromptView(
CookiePromptModalDialog* parent,
gfx::NativeWindow root_window,
- Profile* profile,
- const BrowsingDataLocalStorageHelper::LocalStorageInfo&
- local_storage_info,
- const std::string& host,
- const std::string& cookie_line,
- CookiePromptModalDialogDelegate* delegate,
- bool cookie_ui);
+ Profile* profile);
virtual ~CookiePromptView();
@@ -113,25 +107,11 @@ class CookiePromptView : public views::View,
// Prompt window title.
std::wstring title_;
- // Whether we're showing cookie UI as opposed to other site data.
- bool cookie_ui_;
-
// A pointer to the AppModalDialog that owns us.
CookiePromptModalDialog* parent_;
gfx::NativeWindow root_window_;
- // Cookie / local storage host.
- std::string host_;
-
- // Displayed cookie. Only used when |cookie_ui_| is true.
- std::string cookie_line_;
-
- // Displayed local storage info. Only used when |cookie_ui_| is false.
- BrowsingDataLocalStorageHelper::LocalStorageInfo local_storage_info_;
-
- CookiePromptModalDialogDelegate* delegate_;
-
DISALLOW_COPY_AND_ASSIGN(CookiePromptView);
};
diff --git a/chrome/browser/views/local_storage_set_item_info_view.cc b/chrome/browser/views/local_storage_set_item_info_view.cc
new file mode 100755
index 0000000..b55934e
--- /dev/null
+++ b/chrome/browser/views/local_storage_set_item_info_view.cc
@@ -0,0 +1,130 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/views/local_storage_set_item_info_view.h"
+
+#include <algorithm>
+
+#include "app/gfx/color_utils.h"
+#include "app/l10n_util.h"
+#include "base/i18n/time_formatting.h"
+#include "base/string_util.h"
+#include "grit/generated_resources.h"
+#include "views/grid_layout.h"
+#include "views/controls/label.h"
+#include "views/controls/textfield/textfield.h"
+#include "views/standard_layout.h"
+
+static const int kLocalStorageSetItemInfoViewBorderSize = 1;
+static const int kLocalStorageSetItemInfoViewInsetSize = 3;
+
+///////////////////////////////////////////////////////////////////////////////
+// LocalStorageSetItemInfoView, public:
+
+LocalStorageSetItemInfoView::LocalStorageSetItemInfoView()
+ : host_value_field_(NULL),
+ key_value_field_(NULL),
+ value_value_field_(NULL) {
+}
+
+LocalStorageSetItemInfoView::~LocalStorageSetItemInfoView() {
+}
+
+void LocalStorageSetItemInfoView::SetFields(const std::string& host,
+ const string16& key,
+ const string16& value) {
+ host_value_field_->SetText(UTF8ToWide(host));
+ key_value_field_->SetText(key);
+ value_value_field_->SetText(value);
+ EnableLocalStorageDisplay(true);
+}
+
+void LocalStorageSetItemInfoView::EnableLocalStorageDisplay(bool enabled) {
+ host_value_field_->SetEnabled(enabled);
+ key_value_field_->SetEnabled(enabled);
+ value_value_field_->SetEnabled(enabled);
+}
+
+void LocalStorageSetItemInfoView::ClearLocalStorageDisplay() {
+ std::wstring no_cookie_string =
+ l10n_util::GetString(IDS_COOKIES_COOKIE_NONESELECTED);
+ host_value_field_->SetText(no_cookie_string);
+ key_value_field_->SetText(no_cookie_string);
+ value_value_field_->SetText(no_cookie_string);
+ EnableLocalStorageDisplay(false);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// LocalStorageSetItemInfoView, views::View overrides:
+
+void LocalStorageSetItemInfoView::ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child) {
+ if (is_add && child == this)
+ Init();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// LocalStorageSetItemInfoView, private:
+
+void LocalStorageSetItemInfoView::Init() {
+ SkColor border_color = color_utils::GetSysSkColor(COLOR_3DSHADOW);
+ views::Border* border = views::Border::CreateSolidBorder(
+ kLocalStorageSetItemInfoViewBorderSize, border_color);
+ set_border(border);
+
+ // TODO(jorlow): These strings are not quite right, but we're post-freeze.
+ views::Label* host_label = new views::Label(
+ l10n_util::GetString(IDS_COOKIES_COOKIE_DOMAIN_LABEL));
+ host_value_field_ = new views::Textfield;
+ views::Label* key_label = new views::Label(
+ l10n_util::GetString(IDS_COOKIES_COOKIE_NAME_LABEL));
+ key_value_field_ = new views::Textfield;
+ views::Label* value_label = new views::Label(
+ l10n_util::GetString(IDS_COOKIES_COOKIE_CONTENT_LABEL));
+ value_value_field_ = new views::Textfield;
+
+ using views::GridLayout;
+
+ GridLayout* layout = new GridLayout(this);
+ layout->SetInsets(kLocalStorageSetItemInfoViewInsetSize,
+ kLocalStorageSetItemInfoViewInsetSize,
+ kLocalStorageSetItemInfoViewInsetSize,
+ kLocalStorageSetItemInfoViewInsetSize);
+ SetLayoutManager(layout);
+
+ int three_column_layout_id = 0;
+ views::ColumnSet* column_set = layout->AddColumnSet(three_column_layout_id);
+ column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
+ GridLayout::USE_PREF, 0, 0);
+ column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
+ GridLayout::USE_PREF, 0, 0);
+
+ layout->StartRow(0, three_column_layout_id);
+ layout->AddView(host_label);
+ layout->AddView(host_value_field_);
+ layout->AddPaddingRow(0, kRelatedControlSmallVerticalSpacing);
+ layout->StartRow(0, three_column_layout_id);
+ layout->AddView(key_label);
+ layout->AddView(key_value_field_);
+ layout->AddPaddingRow(0, kRelatedControlSmallVerticalSpacing);
+ layout->StartRow(0, three_column_layout_id);
+ layout->AddView(value_label);
+ layout->AddView(value_value_field_);
+
+ // Color these borderless text areas the same as the containing dialog.
+ SkColor text_area_background = color_utils::GetSysSkColor(COLOR_3DFACE);
+ // Now that the Textfields are in the view hierarchy, we can initialize them.
+ host_value_field_->SetReadOnly(true);
+ host_value_field_->RemoveBorder();
+ host_value_field_->SetBackgroundColor(text_area_background);
+ key_value_field_->SetReadOnly(true);
+ key_value_field_->RemoveBorder();
+ key_value_field_->SetBackgroundColor(text_area_background);
+ value_value_field_->SetReadOnly(true);
+ value_value_field_->RemoveBorder();
+ value_value_field_->SetBackgroundColor(text_area_background);
+}
+
diff --git a/chrome/browser/views/local_storage_set_item_info_view.h b/chrome/browser/views/local_storage_set_item_info_view.h
new file mode 100755
index 0000000..7ab2118
--- /dev/null
+++ b/chrome/browser/views/local_storage_set_item_info_view.h
@@ -0,0 +1,60 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_VIEWS_LOCAL_STORAGE_SET_ITEM_INFO_VIEW_H_
+#define CHROME_BROWSER_VIEWS_LOCAL_STORAGE_SET_ITEM_INFO_VIEW_H_
+
+#include <string>
+#include <vector>
+
+#include "base/string16.h"
+#include "views/view.h"
+
+namespace views {
+class Label;
+class Textfield;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// LocalStorageSetItemInfoView
+//
+// Responsible for displaying a tabular grid of Local Storage information when
+// prompting for permission to set an item.
+class LocalStorageSetItemInfoView : public views::View {
+ public:
+ LocalStorageSetItemInfoView();
+ virtual ~LocalStorageSetItemInfoView();
+
+ // Update the display from the specified Local Storage info.
+ void SetFields(const std::string& host,
+ const string16& key,
+ const string16& value);
+
+ // Clears the display to indicate that no or multiple local storages
+ // are selected.
+ void ClearLocalStorageDisplay();
+
+ // Enables or disables the local storate property text fields.
+ void EnableLocalStorageDisplay(bool enabled);
+
+ protected:
+ // views::View overrides:
+ virtual void ViewHierarchyChanged(
+ bool is_add, views::View* parent, views::View* child);
+
+ private:
+ // Set up the view layout
+ void Init();
+
+ // Individual property labels
+ views::Textfield* host_value_field_;
+ views::Textfield* key_value_field_;
+ views::Textfield* value_value_field_;
+
+ DISALLOW_COPY_AND_ASSIGN(LocalStorageSetItemInfoView);
+};
+
+
+#endif // CHROME_BROWSER_VIEWS_LOCAL_STORAGE_SET_ITEM_INFO_VIEW_H_
+
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index a927299..501e2ae 100755
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1966,6 +1966,8 @@
'browser/views/keyword_editor_view.h',
'browser/views/local_storage_info_view.cc',
'browser/views/local_storage_info_view.h',
+ 'browser/views/local_storage_set_item_info_view.cc',
+ 'browser/views/local_storage_set_item_info_view.h',
'browser/views/location_bar_view.cc',
'browser/views/location_bar_view.h',
'browser/views/login_view.cc',