1 // Copyright (c) 2011 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 #include "chrome/browser/ui/gtk/gtk_chrome_cookie_view.h" 6 7 #include "base/i18n/time_formatting.h" 8 #include "base/utf_string_conversions.h" 9 #include "chrome/browser/ui/gtk/gtk_util.h" 10 #include "grit/generated_resources.h" 11 #include "ui/base/l10n/l10n_util.h" 12 13 namespace { 14 15 void InitBrowserDetailStyle(GtkWidget* entry, GtkStyle* label_style, 16 GtkStyle* dialog_style) { 17 gtk_widget_modify_fg(entry, GTK_STATE_NORMAL, 18 &label_style->fg[GTK_STATE_NORMAL]); 19 gtk_widget_modify_fg(entry, GTK_STATE_INSENSITIVE, 20 &label_style->fg[GTK_STATE_INSENSITIVE]); 21 // GTK_NO_WINDOW widgets like GtkLabel don't draw their own background, so we 22 // combine the normal or insensitive foreground of the label style with the 23 // normal background of the window style to achieve the "normal label" and 24 // "insensitive label" colors. 25 gtk_widget_modify_base(entry, GTK_STATE_NORMAL, 26 &dialog_style->bg[GTK_STATE_NORMAL]); 27 gtk_widget_modify_base(entry, GTK_STATE_INSENSITIVE, 28 &dialog_style->bg[GTK_STATE_NORMAL]); 29 } 30 31 GtkWidget* InitRowLabel(int row, int label_id, GtkWidget* details_table) { 32 GtkWidget* name_label = gtk_label_new( 33 l10n_util::GetStringUTF8(label_id).c_str()); 34 gtk_misc_set_alignment(GTK_MISC(name_label), 1, 0.5); 35 gtk_table_attach(GTK_TABLE(details_table), name_label, 36 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); 37 38 return name_label; 39 } 40 41 GtkWidget* InitDetailRow(int row, int label_id, 42 GtkWidget* details_table, GtkWidget** entry) { 43 GtkWidget* name_label = InitRowLabel(row, label_id, details_table); 44 45 *entry = gtk_entry_new(); 46 gtk_entry_set_editable(GTK_ENTRY(*entry), FALSE); 47 gtk_entry_set_has_frame(GTK_ENTRY(*entry), FALSE); 48 gtk_table_attach_defaults(GTK_TABLE(details_table), *entry, 49 1, 2, row, row + 1); 50 51 return name_label; 52 } 53 54 GtkWidget* InitComboboxRow(int row, int label_id, 55 GtkWidget* details_table, 56 GtkWidget** combobox, 57 GtkListStore** store) { 58 GtkWidget* name_label = InitRowLabel(row, label_id, details_table); 59 60 *store = gtk_list_store_new(1, G_TYPE_STRING); 61 *combobox = gtk_combo_box_new_with_model(GTK_TREE_MODEL(*store)); 62 g_object_unref(*store); 63 64 GtkCellRenderer* cell = gtk_cell_renderer_text_new(); 65 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(*combobox), cell, TRUE); 66 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(*combobox), cell, 67 "text", 0, NULL); 68 69 GtkWidget* hbox = gtk_hbox_new(FALSE, 0); 70 gtk_box_pack_start(GTK_BOX(hbox), *combobox, FALSE, FALSE, 0); 71 72 gtk_table_attach_defaults(GTK_TABLE(details_table), hbox, 73 1, 2, row, row + 1); 74 75 return name_label; 76 } 77 78 void InitStyles(GtkChromeCookieView *self) { 79 GtkStyle* label_style = gtk_widget_get_style(self->first_label_); 80 GtkStyle* dialog_style = gtk_widget_get_style(GTK_WIDGET(self)); 81 82 // Cookie details. 83 InitBrowserDetailStyle(self->cookie_name_entry_, label_style, dialog_style); 84 InitBrowserDetailStyle(self->cookie_content_entry_, label_style, 85 dialog_style); 86 InitBrowserDetailStyle(self->cookie_domain_entry_, label_style, dialog_style); 87 InitBrowserDetailStyle(self->cookie_path_entry_, label_style, dialog_style); 88 InitBrowserDetailStyle(self->cookie_send_for_entry_, label_style, 89 dialog_style); 90 InitBrowserDetailStyle(self->cookie_created_entry_, label_style, 91 dialog_style); 92 if (self->cookie_expires_entry_) { 93 InitBrowserDetailStyle(self->cookie_expires_entry_, label_style, 94 dialog_style); 95 } 96 97 // Database details. 98 InitBrowserDetailStyle(self->database_name_entry_, label_style, dialog_style); 99 InitBrowserDetailStyle(self->database_description_entry_, label_style, 100 dialog_style); 101 InitBrowserDetailStyle(self->database_size_entry_, label_style, dialog_style); 102 InitBrowserDetailStyle(self->database_last_modified_entry_, label_style, 103 dialog_style); 104 105 // Local storage details. 106 InitBrowserDetailStyle(self->local_storage_origin_entry_, label_style, 107 dialog_style); 108 InitBrowserDetailStyle(self->local_storage_size_entry_, label_style, 109 dialog_style); 110 InitBrowserDetailStyle(self->local_storage_last_modified_entry_, label_style, 111 dialog_style); 112 113 // AppCache details. 114 InitBrowserDetailStyle(self->appcache_manifest_entry_, label_style, 115 dialog_style); 116 InitBrowserDetailStyle(self->appcache_size_entry_, label_style, dialog_style); 117 InitBrowserDetailStyle(self->appcache_created_entry_, label_style, 118 dialog_style); 119 InitBrowserDetailStyle(self->appcache_last_accessed_entry_, label_style, 120 dialog_style); 121 122 // Local storage item. 123 InitBrowserDetailStyle(self->local_storage_item_origin_entry_, label_style, 124 dialog_style); 125 InitBrowserDetailStyle(self->local_storage_item_key_entry_, label_style, 126 dialog_style); 127 InitBrowserDetailStyle(self->local_storage_item_value_entry_, label_style, 128 dialog_style); 129 130 // Database accessed item. 131 InitBrowserDetailStyle(self->database_accessed_origin_entry_, label_style, 132 dialog_style); 133 InitBrowserDetailStyle(self->database_accessed_name_entry_, label_style, 134 dialog_style); 135 InitBrowserDetailStyle(self->database_accessed_description_entry_, 136 label_style, dialog_style); 137 InitBrowserDetailStyle(self->database_accessed_size_entry_, label_style, 138 dialog_style); 139 140 // AppCache created item. 141 InitBrowserDetailStyle(self->appcache_created_manifest_entry_, label_style, 142 dialog_style); 143 } 144 145 void SetCookieDetailsSensitivity(GtkChromeCookieView *self, 146 gboolean enabled) { 147 gtk_widget_set_sensitive(self->cookie_name_entry_, enabled); 148 gtk_widget_set_sensitive(self->cookie_content_entry_, enabled); 149 gtk_widget_set_sensitive(self->cookie_domain_entry_, enabled); 150 gtk_widget_set_sensitive(self->cookie_path_entry_, enabled); 151 gtk_widget_set_sensitive(self->cookie_send_for_entry_, enabled); 152 gtk_widget_set_sensitive(self->cookie_created_entry_, enabled); 153 if (self->cookie_expires_entry_) 154 gtk_widget_set_sensitive(self->cookie_expires_entry_, enabled); 155 else 156 gtk_widget_set_sensitive(self->cookie_expires_combobox_, enabled); 157 } 158 159 void SetDatabaseDetailsSensitivity(GtkChromeCookieView *self, 160 gboolean enabled) { 161 gtk_widget_set_sensitive(self->database_name_entry_, enabled); 162 gtk_widget_set_sensitive(self->database_description_entry_, enabled); 163 gtk_widget_set_sensitive(self->database_size_entry_, enabled); 164 gtk_widget_set_sensitive(self->database_last_modified_entry_, enabled); 165 } 166 167 void SetLocalStorageDetailsSensitivity(GtkChromeCookieView *self, 168 gboolean enabled) { 169 gtk_widget_set_sensitive(self->local_storage_origin_entry_, enabled); 170 gtk_widget_set_sensitive(self->local_storage_size_entry_, enabled); 171 gtk_widget_set_sensitive(self->local_storage_last_modified_entry_, enabled); 172 } 173 174 void SetAppCacheDetailsSensitivity(GtkChromeCookieView *self, 175 gboolean enabled) { 176 gtk_widget_set_sensitive(self->appcache_manifest_entry_, enabled); 177 gtk_widget_set_sensitive(self->appcache_size_entry_, enabled); 178 gtk_widget_set_sensitive(self->appcache_created_entry_, enabled); 179 gtk_widget_set_sensitive(self->appcache_last_accessed_entry_, enabled); 180 } 181 182 void SetIndexedDBDetailsSensitivity(GtkChromeCookieView *self, 183 gboolean enabled) { 184 gtk_widget_set_sensitive(self->indexed_db_origin_entry_, enabled); 185 gtk_widget_set_sensitive(self->indexed_db_size_entry_, enabled); 186 gtk_widget_set_sensitive(self->indexed_db_last_modified_entry_, enabled); 187 } 188 189 void SetLocalStorageItemSensitivity(GtkChromeCookieView* self, 190 gboolean enabled) { 191 gtk_widget_set_sensitive(self->local_storage_item_origin_entry_, enabled); 192 gtk_widget_set_sensitive(self->local_storage_item_key_entry_, enabled); 193 gtk_widget_set_sensitive(self->local_storage_item_value_entry_, enabled); 194 } 195 196 void SetDatabaseAccessedSensitivity(GtkChromeCookieView* self, 197 gboolean enabled) { 198 gtk_widget_set_sensitive(self->database_accessed_origin_entry_, enabled); 199 gtk_widget_set_sensitive(self->database_accessed_name_entry_, enabled); 200 gtk_widget_set_sensitive(self->database_accessed_description_entry_, enabled); 201 gtk_widget_set_sensitive(self->database_accessed_size_entry_, enabled); 202 } 203 204 void SetAppCacheCreatedSensitivity(GtkChromeCookieView* self, 205 gboolean enabled) { 206 gtk_widget_set_sensitive(self->appcache_created_manifest_entry_, enabled); 207 } 208 209 void ClearCookieDetails(GtkChromeCookieView *self) { 210 std::string no_cookie = 211 l10n_util::GetStringUTF8(IDS_COOKIES_COOKIE_NONESELECTED); 212 gtk_entry_set_text(GTK_ENTRY(self->cookie_name_entry_), 213 no_cookie.c_str()); 214 gtk_entry_set_text(GTK_ENTRY(self->cookie_content_entry_), 215 no_cookie.c_str()); 216 gtk_entry_set_text(GTK_ENTRY(self->cookie_domain_entry_), 217 no_cookie.c_str()); 218 gtk_entry_set_text(GTK_ENTRY(self->cookie_path_entry_), 219 no_cookie.c_str()); 220 gtk_entry_set_text(GTK_ENTRY(self->cookie_created_entry_), 221 no_cookie.c_str()); 222 if (self->cookie_expires_entry_) { 223 gtk_entry_set_text(GTK_ENTRY(self->cookie_expires_entry_), 224 no_cookie.c_str()); 225 } else { 226 GtkListStore* store = self->cookie_expires_combobox_store_; 227 GtkTreeIter iter; 228 gtk_list_store_clear(store); 229 230 gtk_list_store_append(store, &iter); 231 gtk_list_store_set(store, &iter, 0, no_cookie.c_str(), -1); 232 233 gtk_combo_box_set_active(GTK_COMBO_BOX(self->cookie_expires_combobox_), 234 0); 235 } 236 gtk_entry_set_text(GTK_ENTRY(self->cookie_send_for_entry_), 237 no_cookie.c_str()); 238 SetCookieDetailsSensitivity(self, FALSE); 239 } 240 241 void UpdateVisibleDetailedInfo(GtkChromeCookieView *self, GtkWidget* table) { 242 SetCookieDetailsSensitivity(self, table == self->cookie_details_table_); 243 SetDatabaseDetailsSensitivity(self, table == self->database_details_table_); 244 SetLocalStorageDetailsSensitivity(self, 245 table == self->local_storage_details_table_); 246 SetAppCacheDetailsSensitivity(self, table == self->appcache_details_table_); 247 SetIndexedDBDetailsSensitivity(self, 248 table == self->indexed_db_details_table_); 249 SetLocalStorageItemSensitivity(self, 250 table == self->local_storage_item_table_); 251 SetDatabaseAccessedSensitivity(self, 252 table == self->database_accessed_table_); 253 SetAppCacheCreatedSensitivity(self, 254 table == self->appcache_created_table_); 255 256 // Display everything 257 gtk_widget_show(self->table_box_); 258 gtk_widget_show_all(table); 259 // Hide everything that isn't us. 260 if (table != self->cookie_details_table_) 261 gtk_widget_hide(self->cookie_details_table_); 262 if (table != self->database_details_table_) 263 gtk_widget_hide(self->database_details_table_); 264 if (table != self->local_storage_details_table_) 265 gtk_widget_hide(self->local_storage_details_table_); 266 if (table != self->appcache_details_table_) 267 gtk_widget_hide(self->appcache_details_table_); 268 if (table != self->indexed_db_details_table_) 269 gtk_widget_hide(self->indexed_db_details_table_); 270 if (table != self->local_storage_item_table_) 271 gtk_widget_hide(self->local_storage_item_table_); 272 if (table != self->database_accessed_table_) 273 gtk_widget_hide(self->database_accessed_table_); 274 if (table != self->appcache_created_table_) 275 gtk_widget_hide(self->appcache_created_table_); 276 } 277 278 } // namespace 279 280 G_DEFINE_TYPE(GtkChromeCookieView, gtk_chrome_cookie_view, GTK_TYPE_FRAME) 281 282 static void gtk_chrome_cookie_view_class_init(GtkChromeCookieViewClass *klass) { 283 } 284 285 static void gtk_chrome_cookie_view_init(GtkChromeCookieView *self) { 286 } 287 288 void BuildWidgets(GtkChromeCookieView *self, gboolean editable_expiration) { 289 self->table_box_ = gtk_vbox_new(FALSE, 0); 290 gtk_widget_set_no_show_all(self->table_box_, TRUE); 291 292 // Cookie details. 293 self->cookie_details_table_ = gtk_table_new(7, 2, FALSE); 294 gtk_container_add(GTK_CONTAINER(self->table_box_), 295 self->cookie_details_table_); 296 gtk_table_set_col_spacing(GTK_TABLE(self->cookie_details_table_), 0, 297 gtk_util::kLabelSpacing); 298 299 int row = 0; 300 self->first_label_ = InitDetailRow(row++, IDS_COOKIES_COOKIE_NAME_LABEL, 301 self->cookie_details_table_, &self->cookie_name_entry_); 302 InitDetailRow(row++, IDS_COOKIES_COOKIE_CONTENT_LABEL, 303 self->cookie_details_table_, &self->cookie_content_entry_); 304 InitDetailRow(row++, IDS_COOKIES_COOKIE_DOMAIN_LABEL, 305 self->cookie_details_table_, &self->cookie_domain_entry_); 306 InitDetailRow(row++, IDS_COOKIES_COOKIE_PATH_LABEL, 307 self->cookie_details_table_, &self->cookie_path_entry_); 308 InitDetailRow(row++, IDS_COOKIES_COOKIE_SENDFOR_LABEL, 309 self->cookie_details_table_, &self->cookie_send_for_entry_); 310 InitDetailRow(row++, IDS_COOKIES_COOKIE_CREATED_LABEL, 311 self->cookie_details_table_, &self->cookie_created_entry_); 312 if (editable_expiration) { 313 InitComboboxRow(row++, IDS_COOKIES_COOKIE_EXPIRES_LABEL, 314 self->cookie_details_table_, 315 &self->cookie_expires_combobox_, 316 &self->cookie_expires_combobox_store_); 317 } else { 318 InitDetailRow(row++, IDS_COOKIES_COOKIE_EXPIRES_LABEL, 319 self->cookie_details_table_, &self->cookie_expires_entry_); 320 } 321 322 // Database details. 323 self->database_details_table_ = gtk_table_new(4, 2, FALSE); 324 gtk_container_add(GTK_CONTAINER(self->table_box_), 325 self->database_details_table_); 326 gtk_table_set_col_spacing(GTK_TABLE(self->database_details_table_), 0, 327 gtk_util::kLabelSpacing); 328 329 InitDetailRow(row++, IDS_COOKIES_COOKIE_NAME_LABEL, 330 self->database_details_table_, &self->database_name_entry_); 331 InitDetailRow(row++, IDS_COOKIES_WEB_DATABASE_DESCRIPTION_LABEL, 332 self->database_details_table_, 333 &self->database_description_entry_); 334 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL, 335 self->database_details_table_, &self->database_size_entry_); 336 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL, 337 self->database_details_table_, 338 &self->database_last_modified_entry_); 339 340 // Local storage details. 341 self->local_storage_details_table_ = gtk_table_new(3, 2, FALSE); 342 gtk_container_add(GTK_CONTAINER(self->table_box_), 343 self->local_storage_details_table_); 344 gtk_table_set_col_spacing(GTK_TABLE(self->local_storage_details_table_), 0, 345 gtk_util::kLabelSpacing); 346 347 row = 0; 348 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL, 349 self->local_storage_details_table_, 350 &self->local_storage_origin_entry_); 351 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL, 352 self->local_storage_details_table_, 353 &self->local_storage_size_entry_); 354 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL, 355 self->local_storage_details_table_, 356 &self->local_storage_last_modified_entry_); 357 358 // AppCache details. 359 self->appcache_details_table_ = gtk_table_new(4, 2, FALSE); 360 gtk_container_add(GTK_CONTAINER(self->table_box_), 361 self->appcache_details_table_); 362 gtk_table_set_col_spacing(GTK_TABLE(self->appcache_details_table_), 0, 363 gtk_util::kLabelSpacing); 364 365 row = 0; 366 InitDetailRow(row++, IDS_COOKIES_APPLICATION_CACHE_MANIFEST_LABEL, 367 self->appcache_details_table_, 368 &self->appcache_manifest_entry_); 369 InitDetailRow(row++, IDS_COOKIES_SIZE_LABEL, 370 self->appcache_details_table_, &self->appcache_size_entry_); 371 InitDetailRow(row++, IDS_COOKIES_COOKIE_CREATED_LABEL, 372 self->appcache_details_table_, &self->appcache_created_entry_); 373 InitDetailRow(row++, IDS_COOKIES_LAST_ACCESSED_LABEL, 374 self->appcache_details_table_, 375 &self->appcache_last_accessed_entry_); 376 377 // IndexedDB details. 378 self->indexed_db_details_table_ = gtk_table_new(4, 2, FALSE); 379 gtk_container_add(GTK_CONTAINER(self->table_box_), 380 self->indexed_db_details_table_); 381 gtk_table_set_col_spacing(GTK_TABLE(self->indexed_db_details_table_), 0, 382 gtk_util::kLabelSpacing); 383 384 row = 0; 385 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL, 386 self->indexed_db_details_table_, 387 &self->indexed_db_origin_entry_); 388 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL, 389 self->indexed_db_details_table_, &self->indexed_db_size_entry_); 390 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL, 391 self->indexed_db_details_table_, 392 &self->indexed_db_last_modified_entry_); 393 394 // Local storage item. 395 self->local_storage_item_table_ = gtk_table_new(3, 2, FALSE); 396 gtk_container_add(GTK_CONTAINER(self->table_box_), 397 self->local_storage_item_table_); 398 gtk_table_set_col_spacing(GTK_TABLE(self->local_storage_item_table_), 0, 399 gtk_util::kLabelSpacing); 400 401 row = 0; 402 InitDetailRow(row++, IDS_COOKIES_COOKIE_DOMAIN_LABEL, 403 self->local_storage_item_table_, 404 &self->local_storage_item_origin_entry_); 405 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_KEY_LABEL, 406 self->local_storage_item_table_, 407 &self->local_storage_item_key_entry_); 408 InitDetailRow(row++, IDS_COOKIES_LOCAL_STORAGE_VALUE_LABEL, 409 self->local_storage_item_table_, 410 &self->local_storage_item_value_entry_); 411 412 // Database accessed prompt. 413 self->database_accessed_table_ = gtk_table_new(2, 2, FALSE); 414 gtk_container_add(GTK_CONTAINER(self->table_box_), 415 self->database_accessed_table_); 416 gtk_table_set_col_spacing(GTK_TABLE(self->local_storage_item_table_), 0, 417 gtk_util::kLabelSpacing); 418 419 row = 0; 420 InitDetailRow(row++, IDS_COOKIES_COOKIE_DOMAIN_LABEL, 421 self->database_accessed_table_, 422 &self->database_accessed_origin_entry_); 423 InitDetailRow(row++, IDS_COOKIES_WEB_DATABASE_NAME, 424 self->database_accessed_table_, 425 &self->database_accessed_name_entry_); 426 InitDetailRow(row++, IDS_COOKIES_WEB_DATABASE_DESCRIPTION_LABEL, 427 self->database_accessed_table_, 428 &self->database_accessed_description_entry_); 429 InitDetailRow(row++, IDS_COOKIES_SIZE_LABEL, 430 self->database_accessed_table_, 431 &self->database_accessed_size_entry_); 432 433 // AppCache created prompt. 434 self->appcache_created_table_ = gtk_table_new(1, 2, FALSE); 435 gtk_container_add(GTK_CONTAINER(self->table_box_), 436 self->appcache_created_table_); 437 gtk_table_set_col_spacing(GTK_TABLE(self->appcache_created_table_), 0, 438 gtk_util::kLabelSpacing); 439 row = 0; 440 InitDetailRow(row++, IDS_COOKIES_APPLICATION_CACHE_MANIFEST_LABEL, 441 self->appcache_created_table_, 442 &self->appcache_created_manifest_entry_); 443 444 gtk_frame_set_shadow_type(GTK_FRAME(self), GTK_SHADOW_ETCHED_IN); 445 gtk_container_add(GTK_CONTAINER(self), self->table_box_); 446 } 447 448 GtkWidget* gtk_chrome_cookie_view_new(gboolean editable_expiration) { 449 GtkChromeCookieView* view = GTK_CHROME_COOKIE_VIEW( 450 g_object_new(GTK_TYPE_CHROME_COOKIE_VIEW, NULL)); 451 BuildWidgets(view, editable_expiration); 452 g_signal_connect(view, "realize", G_CALLBACK(InitStyles), NULL); 453 return GTK_WIDGET(view); 454 } 455 456 void gtk_chrome_cookie_view_clear(GtkChromeCookieView* self) { 457 UpdateVisibleDetailedInfo(self, self->cookie_details_table_); 458 ClearCookieDetails(self); 459 } 460 461 // Switches the display to showing the passed in cookie. 462 void gtk_chrome_cookie_view_display_cookie( 463 GtkChromeCookieView* self, 464 const std::string& domain, 465 const net::CookieMonster::CanonicalCookie& cookie) { 466 UpdateVisibleDetailedInfo(self, self->cookie_details_table_); 467 468 gtk_entry_set_text(GTK_ENTRY(self->cookie_name_entry_), 469 cookie.Name().c_str()); 470 gtk_entry_set_text(GTK_ENTRY(self->cookie_content_entry_), 471 cookie.Value().c_str()); 472 gtk_entry_set_text(GTK_ENTRY(self->cookie_domain_entry_), 473 domain.c_str()); 474 gtk_entry_set_text(GTK_ENTRY(self->cookie_path_entry_), 475 cookie.Path().c_str()); 476 gtk_entry_set_text(GTK_ENTRY(self->cookie_created_entry_), 477 UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime( 478 cookie.CreationDate())).c_str()); 479 480 std::string expire_text = cookie.DoesExpire() ? 481 UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(cookie.ExpiryDate())) : 482 l10n_util::GetStringUTF8(IDS_COOKIES_COOKIE_EXPIRES_SESSION); 483 484 if (self->cookie_expires_entry_) { 485 gtk_entry_set_text(GTK_ENTRY(self->cookie_expires_entry_), 486 expire_text.c_str()); 487 } else { 488 GtkListStore* store = self->cookie_expires_combobox_store_; 489 GtkTreeIter iter; 490 gtk_list_store_clear(store); 491 492 if (cookie.DoesExpire()) { 493 gtk_list_store_append(store, &iter); 494 gtk_list_store_set(store, &iter, 0, expire_text.c_str(), -1); 495 } 496 497 gtk_list_store_append(store, &iter); 498 gtk_list_store_set( 499 store, &iter, 0, 500 l10n_util::GetStringUTF8(IDS_COOKIES_COOKIE_EXPIRES_SESSION).c_str(), 501 -1); 502 503 gtk_combo_box_set_active(GTK_COMBO_BOX(self->cookie_expires_combobox_), 504 0); 505 } 506 507 gtk_entry_set_text( 508 GTK_ENTRY(self->cookie_send_for_entry_), 509 l10n_util::GetStringUTF8(cookie.IsSecure() ? 510 IDS_COOKIES_COOKIE_SENDFOR_SECURE : 511 IDS_COOKIES_COOKIE_SENDFOR_ANY).c_str()); 512 SetCookieDetailsSensitivity(self, TRUE); 513 } 514 515 void gtk_chrome_cookie_view_display_cookie_string( 516 GtkChromeCookieView* self, 517 const GURL& url, 518 const std::string& cookie_line) { 519 net::CookieMonster::ParsedCookie pc(cookie_line); 520 net::CookieMonster::CanonicalCookie cookie(url, pc); 521 522 gtk_chrome_cookie_view_display_cookie( 523 self, 524 pc.HasDomain() ? pc.Domain() : url.host(), 525 cookie); 526 } 527 528 // Switches the display to showing the passed in database. 529 void gtk_chrome_cookie_view_display_database( 530 GtkChromeCookieView* self, 531 const BrowsingDataDatabaseHelper::DatabaseInfo& database_info) { 532 UpdateVisibleDetailedInfo(self, self->database_details_table_); 533 534 gtk_entry_set_text( 535 GTK_ENTRY(self->database_name_entry_), 536 database_info.database_name.empty() ? 537 l10n_util::GetStringUTF8( 538 IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME).c_str() : 539 database_info.database_name.c_str()); 540 gtk_entry_set_text(GTK_ENTRY(self->database_description_entry_), 541 database_info.description.c_str()); 542 gtk_entry_set_text(GTK_ENTRY(self->database_size_entry_), 543 UTF16ToUTF8(FormatBytes( 544 database_info.size, 545 GetByteDisplayUnits(database_info.size), 546 true)).c_str()); 547 gtk_entry_set_text(GTK_ENTRY(self->database_last_modified_entry_), 548 UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime( 549 database_info.last_modified)).c_str()); 550 SetDatabaseDetailsSensitivity(self, TRUE); 551 } 552 553 // Switches the display to showing the passed in local storage data. 554 void gtk_chrome_cookie_view_display_local_storage( 555 GtkChromeCookieView* self, 556 const BrowsingDataLocalStorageHelper::LocalStorageInfo& 557 local_storage_info) { 558 UpdateVisibleDetailedInfo(self, self->local_storage_details_table_); 559 560 gtk_entry_set_text(GTK_ENTRY(self->local_storage_origin_entry_), 561 local_storage_info.origin.c_str()); 562 gtk_entry_set_text(GTK_ENTRY(self->local_storage_size_entry_), 563 UTF16ToUTF8(FormatBytes( 564 local_storage_info.size, 565 GetByteDisplayUnits(local_storage_info.size), 566 true)).c_str()); 567 gtk_entry_set_text(GTK_ENTRY(self->local_storage_last_modified_entry_), 568 UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime( 569 local_storage_info.last_modified)).c_str()); 570 SetLocalStorageDetailsSensitivity(self, TRUE); 571 } 572 573 // Switches the display to showing the passed in app cache. 574 void gtk_chrome_cookie_view_display_app_cache( 575 GtkChromeCookieView* self, 576 const appcache::AppCacheInfo& info) { 577 UpdateVisibleDetailedInfo(self, self->appcache_details_table_); 578 579 gtk_entry_set_text(GTK_ENTRY(self->appcache_manifest_entry_), 580 info.manifest_url.spec().c_str()); 581 gtk_entry_set_text(GTK_ENTRY(self->appcache_size_entry_), 582 UTF16ToUTF8(FormatBytes( 583 info.size, 584 GetByteDisplayUnits(info.size), 585 true)).c_str()); 586 gtk_entry_set_text(GTK_ENTRY(self->appcache_created_entry_), 587 UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime( 588 info.creation_time)).c_str()); 589 gtk_entry_set_text(GTK_ENTRY(self->appcache_last_accessed_entry_), 590 UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime( 591 info.last_access_time)).c_str()); 592 SetAppCacheDetailsSensitivity(self, TRUE); 593 } 594 595 // Switches the display to showing the passed in IndexedDB data. 596 void gtk_chrome_cookie_view_display_indexed_db( 597 GtkChromeCookieView* self, 598 const BrowsingDataIndexedDBHelper::IndexedDBInfo& indexed_db_info) { 599 UpdateVisibleDetailedInfo(self, self->indexed_db_details_table_); 600 601 gtk_entry_set_text(GTK_ENTRY(self->indexed_db_origin_entry_), 602 indexed_db_info.origin.c_str()); 603 gtk_entry_set_text(GTK_ENTRY(self->indexed_db_size_entry_), 604 UTF16ToUTF8(FormatBytes( 605 indexed_db_info.size, 606 GetByteDisplayUnits(indexed_db_info.size), 607 true)).c_str()); 608 gtk_entry_set_text(GTK_ENTRY(self->indexed_db_last_modified_entry_), 609 UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime( 610 indexed_db_info.last_modified)).c_str()); 611 SetLocalStorageDetailsSensitivity(self, TRUE); 612 } 613 614 void gtk_chrome_cookie_view_display_local_storage_item( 615 GtkChromeCookieView* self, 616 const std::string& host, 617 const string16& key, 618 const string16& value) { 619 UpdateVisibleDetailedInfo(self, self->local_storage_item_table_); 620 621 gtk_entry_set_text(GTK_ENTRY(self->local_storage_item_origin_entry_), 622 host.c_str()); 623 gtk_entry_set_text(GTK_ENTRY(self->local_storage_item_key_entry_), 624 UTF16ToUTF8(key).c_str()); 625 gtk_entry_set_text(GTK_ENTRY(self->local_storage_item_value_entry_), 626 UTF16ToUTF8(value).c_str()); 627 SetLocalStorageItemSensitivity(self, TRUE); 628 } 629 630 void gtk_chrome_cookie_view_display_database_accessed( 631 GtkChromeCookieView* self, 632 const std::string& host, 633 const string16& database_name, 634 const string16& display_name, 635 unsigned long estimated_size) { 636 UpdateVisibleDetailedInfo(self, self->database_accessed_table_); 637 638 gtk_entry_set_text(GTK_ENTRY(self->database_accessed_origin_entry_), 639 host.c_str()); 640 gtk_entry_set_text(GTK_ENTRY(self->database_accessed_name_entry_), 641 UTF16ToUTF8(database_name).c_str()); 642 gtk_entry_set_text(GTK_ENTRY(self->database_accessed_description_entry_), 643 UTF16ToUTF8(display_name).c_str()); 644 gtk_entry_set_text(GTK_ENTRY(self->database_accessed_size_entry_), 645 UTF16ToUTF8(FormatBytes( 646 estimated_size, 647 GetByteDisplayUnits(estimated_size), 648 true)).c_str()); 649 SetDatabaseAccessedSensitivity(self, TRUE); 650 } 651 652 void gtk_chrome_cookie_view_display_appcache_created( 653 GtkChromeCookieView* self, 654 const GURL& manifest_url) { 655 UpdateVisibleDetailedInfo(self, self->appcache_created_table_); 656 gtk_entry_set_text(GTK_ENTRY(self->appcache_created_manifest_entry_), 657 manifest_url.spec().c_str()); 658 SetAppCacheCreatedSensitivity(self, TRUE); 659 } 660 661 bool gtk_chrome_cookie_view_session_expires(GtkChromeCookieView* self) { 662 if (self->cookie_expires_entry_) 663 return false; 664 665 GtkListStore* store = self->cookie_expires_combobox_store_; 666 int store_size = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL); 667 if (store_size == 1) 668 return false; 669 670 DCHECK_EQ(2, store_size); 671 672 int selected = gtk_combo_box_get_active(GTK_COMBO_BOX( 673 self->cookie_expires_combobox_)); 674 return selected == 1; 675 } 676