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