• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_UI_VIEWS_COOKIE_INFO_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_COOKIE_INFO_VIEW_H_
7 #pragma once
8 
9 #include <string>
10 #include <vector>
11 
12 #include "base/string16.h"
13 #include "net/base/cookie_monster.h"
14 #include "ui/base/models/combobox_model.h"
15 #include "views/controls/combobox/combobox.h"
16 #include "views/view.h"
17 
18 namespace views {
19 class GridLayout;
20 class Label;
21 class NativeButton;
22 class Textfield;
23 }
24 
25 
26 ///////////////////////////////////////////////////////////////////////////////
27 // CookieInfoViewDelegate
28 //
29 class CookieInfoViewDelegate {
30  public:
31   virtual void ModifyExpireDate(bool session_expire) = 0;
32 
33  protected:
~CookieInfoViewDelegate()34   virtual ~CookieInfoViewDelegate() {}
35 };
36 
37 ///////////////////////////////////////////////////////////////////////////////
38 // CookieInfoView
39 //
40 //  Responsible for displaying a tabular grid of Cookie information.
41 class CookieInfoView : public views::View,
42                        public views::Combobox::Listener,
43                        public ui::ComboboxModel {
44  public:
45   explicit CookieInfoView(bool editable_expiration_date);
46   virtual ~CookieInfoView();
47 
48   // Update the display from the specified CookieNode.
49   void SetCookie(const std::string& domain,
50                  const net::CookieMonster::CanonicalCookie& cookie_node);
51 
52   // Update the display from the specified cookie string.
53   void SetCookieString(const GURL& url, const std::string& cookie_line);
54 
55   // Clears the cookie display to indicate that no or multiple cookies are
56   // selected.
57   void ClearCookieDisplay();
58 
59   // Enables or disables the cookie property text fields.
60   void EnableCookieDisplay(bool enabled);
61 
set_delegate(CookieInfoViewDelegate * delegate)62   void set_delegate(CookieInfoViewDelegate* delegate) { delegate_ = delegate; }
63 
64  protected:
65   // views::View overrides:
66   virtual void ViewHierarchyChanged(bool is_add,
67                                     views::View* parent,
68                                     views::View* child);
69 
70   // views::Combobox::Listener override.
71   virtual void ItemChanged(views::Combobox* combo_box,
72                            int prev_index,
73                            int new_index);
74 
75   // ui::ComboboxModel overrides for expires_value_combobox_.
76   virtual int GetItemCount();
77   virtual string16 GetItemAt(int index);
78 
79  private:
80   // Layout helper routines.
81   void AddLabelRow(int layout_id, views::GridLayout* layout,
82                    views::View* label, views::View* value);
83   void AddControlRow(int layout_id, views::GridLayout* layout,
84                      views::View* label, views::View* control);
85 
86   // Sets up the view layout.
87   void Init();
88 
89   // Individual property labels
90   views::Label* name_label_;
91   views::Textfield* name_value_field_;
92   views::Label* content_label_;
93   views::Textfield* content_value_field_;
94   views::Label* domain_label_;
95   views::Textfield* domain_value_field_;
96   views::Label* path_label_;
97   views::Textfield* path_value_field_;
98   views::Label* send_for_label_;
99   views::Textfield* send_for_value_field_;
100   views::Label* created_label_;
101   views::Textfield* created_value_field_;
102   views::Label* expires_label_;
103   views::Textfield* expires_value_field_;
104   views::Combobox* expires_value_combobox_;
105   views::View* expire_view_;
106 
107   // Option values for expires_value_combobox_.
108   std::vector<std::wstring> expire_combo_values_;
109 
110   // True if expiration date can be edited. In this case we will show
111   // expires_value_combobox_ instead of expires_value_field_. The cookie's
112   // expiration date is editable only this class is used in
113   // CookiesPromptView (alert before cookie is set), in all other cases we
114   // don't let user directly change cookie setting.
115   bool editable_expiration_date_;
116 
117   CookieInfoViewDelegate* delegate_;
118 
119   DISALLOW_COPY_AND_ASSIGN(CookieInfoView);
120 };
121 
122 #endif  // CHROME_BROWSER_UI_VIEWS_COOKIE_INFO_VIEW_H_
123 
124