172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/local_storage_info_view.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <algorithm>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/i18n/time_formatting.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/color_utils.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/label.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/textfield/textfield.h"
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/grid_layout.h"
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/layout_constants.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const int kLocalStorageInfoViewBorderSize = 1;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const int kLocalStorageInfoViewInsetSize = 3;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LocalStorageInfoView, public:
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochLocalStorageInfoView::LocalStorageInfoView()
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : origin_value_field_(NULL),
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      size_value_field_(NULL),
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      last_modified_value_field_(NULL) {
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochLocalStorageInfoView::~LocalStorageInfoView() {
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid LocalStorageInfoView::SetLocalStorageInfo(
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const BrowsingDataLocalStorageHelper::LocalStorageInfo&
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    local_storage_info) {
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin_value_field_->SetText(UTF8ToWide(local_storage_info.origin));
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_value_field_->SetText(
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      FormatBytes(local_storage_info.size,
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  GetByteDisplayUnits(local_storage_info.size),
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  true));
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  last_modified_value_field_->SetText(
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      base::TimeFormatFriendlyDateAndTime(local_storage_info.last_modified));
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EnableLocalStorageDisplay(true);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid LocalStorageInfoView::EnableLocalStorageDisplay(bool enabled) {
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin_value_field_->SetEnabled(enabled);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_value_field_->SetEnabled(enabled);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  last_modified_value_field_->SetEnabled(enabled);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid LocalStorageInfoView::ClearLocalStorageDisplay() {
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::wstring no_cookie_string =
553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      UTF16ToWide(l10n_util::GetStringUTF16(IDS_COOKIES_COOKIE_NONESELECTED));
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin_value_field_->SetText(no_cookie_string);
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_value_field_->SetText(no_cookie_string);
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  last_modified_value_field_->SetText(no_cookie_string);
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EnableLocalStorageDisplay(false);
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LocalStorageInfoView, views::View overrides:
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid LocalStorageInfoView::ViewHierarchyChanged(bool is_add,
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                views::View* parent,
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                views::View* child) {
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (is_add && child == this)
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Init();
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LocalStorageInfoView, private:
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid LocalStorageInfoView::Init() {
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkColor border_color = color_utils::GetSysSkColor(COLOR_3DSHADOW);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::Border* border = views::Border::CreateSolidBorder(
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      kLocalStorageInfoViewBorderSize, border_color);
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  set_border(border);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
813f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  views::Label* origin_label = new views::Label(UTF16ToWide(
823f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL)));
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin_value_field_ = new views::Textfield;
843f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  views::Label* size_label = new views::Label(UTF16ToWide(
853f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL)));
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_value_field_ = new views::Textfield;
873f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  views::Label* last_modified_label = new views::Label(UTF16ToWide(
883f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      l10n_util::GetStringUTF16(
893f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen          IDS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL)));
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  last_modified_value_field_ = new views::Textfield;
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  using views::GridLayout;
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GridLayout* layout = new GridLayout(this);
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->SetInsets(kLocalStorageInfoViewInsetSize,
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    kLocalStorageInfoViewInsetSize,
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    kLocalStorageInfoViewInsetSize,
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    kLocalStorageInfoViewInsetSize);
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetLayoutManager(layout);
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int three_column_layout_id = 0;
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::ColumnSet* column_set = layout->AddColumnSet(three_column_layout_id);
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        GridLayout::USE_PREF, 0, 0);
10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        GridLayout::USE_PREF, 0, 0);
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->StartRow(0, three_column_layout_id);
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(origin_label);
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(origin_value_field_);
11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing);
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->StartRow(0, three_column_layout_id);
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(size_label);
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(size_value_field_);
11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing);
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->StartRow(0, three_column_layout_id);
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(last_modified_label);
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(last_modified_value_field_);
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Color these borderless text areas the same as the containing dialog.
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkColor text_area_background = color_utils::GetSysSkColor(COLOR_3DFACE);
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Now that the Textfields are in the view hierarchy, we can initialize them.
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin_value_field_->SetReadOnly(true);
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin_value_field_->RemoveBorder();
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin_value_field_->SetBackgroundColor(text_area_background);
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_value_field_->SetReadOnly(true);
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_value_field_->RemoveBorder();
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_value_field_->SetBackgroundColor(text_area_background);
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  last_modified_value_field_->SetReadOnly(true);
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  last_modified_value_field_->RemoveBorder();
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  last_modified_value_field_->SetBackgroundColor(text_area_background);
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
135