14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_COOKIE_INFO_VIEW_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_COOKIE_INFO_VIEW_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <string>
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <vector>
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/string16.h"
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "net/base/cookie_monster.h"
1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/models/combobox_model.h"
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/combobox/combobox.h"
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/view.h"
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views {
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass GridLayout;
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Label;
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass NativeButton;
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Textfield;
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch///////////////////////////////////////////////////////////////////////////////
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// CookieInfoViewDelegate
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass CookieInfoViewDelegate {
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void ModifyExpireDate(bool session_expire) = 0;
324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected:
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~CookieInfoViewDelegate() {}
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch///////////////////////////////////////////////////////////////////////////////
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// CookieInfoView
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//  Responsible for displaying a tabular grid of Cookie information.
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass CookieInfoView : public views::View,
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                       public views::Combobox::Listener,
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                       public ui::ComboboxModel {
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  explicit CookieInfoView(bool editable_expiration_date);
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~CookieInfoView();
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Update the display from the specified CookieNode.
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void SetCookie(const std::string& domain,
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                 const net::CookieMonster::CanonicalCookie& cookie_node);
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Update the display from the specified cookie string.
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void SetCookieString(const GURL& url, const std::string& cookie_line);
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Clears the cookie display to indicate that no or multiple cookies are
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // selected.
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void ClearCookieDisplay();
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Enables or disables the cookie property text fields.
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void EnableCookieDisplay(bool enabled);
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void set_delegate(CookieInfoViewDelegate* delegate) { delegate_ = delegate; }
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected:
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // views::View overrides:
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void ViewHierarchyChanged(bool is_add,
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                    views::View* parent,
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                    views::View* child);
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // views::Combobox::Listener override.
714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void ItemChanged(views::Combobox* combo_box,
724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                           int prev_index,
734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                           int new_index);
744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // ui::ComboboxModel overrides for expires_value_combobox_.
764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual int GetItemCount();
774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual string16 GetItemAt(int index);
784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Layout helper routines.
814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void AddLabelRow(int layout_id, views::GridLayout* layout,
824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                   views::View* label, views::View* value);
834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void AddControlRow(int layout_id, views::GridLayout* layout,
844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                     views::View* label, views::View* control);
854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Sets up the view layout.
874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void Init();
884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Individual property labels
904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* name_label_;
914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* name_value_field_;
924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* content_label_;
934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* content_value_field_;
944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* domain_label_;
954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* domain_value_field_;
964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* path_label_;
974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* path_value_field_;
984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* send_for_label_;
994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* send_for_value_field_;
1004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* created_label_;
1014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* created_value_field_;
1024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* expires_label_;
1034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* expires_value_field_;
1044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Combobox* expires_value_combobox_;
1054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::View* expire_view_;
1064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Option values for expires_value_combobox_.
1084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  std::vector<std::wstring> expire_combo_values_;
1094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // True if expiration date can be edited. In this case we will show
1114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // expires_value_combobox_ instead of expires_value_field_. The cookie's
1124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // expiration date is editable only this class is used in
1134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // CookiesPromptView (alert before cookie is set), in all other cases we
1144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // don't let user directly change cookie setting.
1154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  bool editable_expiration_date_;
1164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  CookieInfoViewDelegate* delegate_;
1184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(CookieInfoView);
1204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
1214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_COOKIE_INFO_VIEW_H_
1234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
124