| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/gtk/bookmark_manager_gtk.h" | 5 #include "chrome/browser/gtk/bookmark_manager_gtk.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
| 10 #include "app/resource_bundle.h" | 10 #include "app/resource_bundle.h" |
| 11 #include "base/path_service.h" | 11 #include "base/path_service.h" |
| 12 #include "base/string16.h" | 12 #include "base/string16.h" |
| 13 #include "base/thread.h" | 13 #include "base/thread.h" |
| 14 #include "chrome/browser/bookmarks/bookmark_html_writer.h" | 14 #include "chrome/browser/bookmarks/bookmark_html_writer.h" |
| 15 #include "chrome/browser/bookmarks/bookmark_manager.h" | 15 #include "chrome/browser/bookmarks/bookmark_manager.h" |
| 16 #include "chrome/browser/bookmarks/bookmark_table_model.h" | 16 #include "chrome/browser/bookmarks/bookmark_table_model.h" |
| 17 #include "chrome/browser/browser_process.h" | 17 #include "chrome/browser/browser_process.h" |
| 18 #include "chrome/browser/gtk/bookmark_tree_model.h" | 18 #include "chrome/browser/gtk/bookmark_tree_model.h" |
| 19 #include "chrome/browser/gtk/bookmark_utils_gtk.h" | 19 #include "chrome/browser/gtk/bookmark_utils_gtk.h" |
| 20 #include "chrome/browser/gtk/gtk_dnd_util.h" | 20 #include "chrome/browser/gtk/gtk_dnd_util.h" |
| 21 #include "chrome/browser/importer/importer.h" | 21 #include "chrome/browser/importer/importer.h" |
| 22 #include "chrome/browser/profile.h" | 22 #include "chrome/browser/profile.h" |
| 23 #include "chrome/common/chrome_paths.h" | 23 #include "chrome/common/chrome_paths.h" |
| 24 #include "chrome/common/gtk_util.h" | 24 #include "chrome/common/gtk_util.h" |
| 25 #include "chrome/common/pref_names.h" | 25 #include "chrome/common/pref_names.h" |
| 26 #include "chrome/common/pref_service.h" | 26 #include "chrome/common/pref_service.h" |
| 27 #include "grit/app_resources.h" | 27 #include "grit/app_resources.h" |
| 28 #include "grit/generated_resources.h" | 28 #include "grit/generated_resources.h" |
| 29 #include "grit/locale_settings.h" |
| 29 #include "grit/theme_resources.h" | 30 #include "grit/theme_resources.h" |
| 30 | 31 |
| 31 namespace { | 32 namespace { |
| 32 | 33 |
| 33 // Number of bookmarks shown in recently bookmarked. | 34 // Number of bookmarks shown in recently bookmarked. |
| 34 const int kRecentlyBookmarkedCount = 50; | 35 const int kRecentlyBookmarkedCount = 50; |
| 35 | 36 |
| 36 // IDs for the recently added and search nodes. These values assume that node | 37 // IDs for the recently added and search nodes. These values assume that node |
| 37 // IDs will be strictly non-negative, which is an implementation detail of | 38 // IDs will be strictly non-negative, which is an implementation detail of |
| 38 // BookmarkModel, so this is sort of a hack. | 39 // BookmarkModel, so this is sort of a hack. |
| 39 const int kRecentID = -1; | 40 const int kRecentID = -1; |
| 40 const int kSearchID = -2; | 41 const int kSearchID = -2; |
| 41 | 42 |
| 42 // Padding between "Search:" and the entry field, in pixels. | 43 // Padding between "Search:" and the entry field, in pixels. |
| 43 const int kSearchPadding = 5; | 44 const int kSearchPadding = 5; |
| 44 | 45 |
| 45 // Time between a user action in the search box and when we perform the search. | 46 // Time between a user action in the search box and when we perform the search. |
| 46 const int kSearchDelayMS = 200; | 47 const int kSearchDelayMS = 200; |
| 47 | 48 |
| 49 // The default width of a column in the right tree view. Since we set the |
| 50 // columns to ellipsize, if we don't explicitly set a width they will be |
| 51 // wide enough to display only '...'. This will be overridden if the user |
| 52 // resizes the column. |
| 53 const int kDefaultColumnWidth = 200; |
| 54 |
| 48 // We only have one manager open at a time. | 55 // We only have one manager open at a time. |
| 49 BookmarkManagerGtk* manager = NULL; | 56 BookmarkManagerGtk* manager = NULL; |
| 50 | 57 |
| 51 // Observer installed on the importer. When done importing the newly created | 58 // Observer installed on the importer. When done importing the newly created |
| 52 // folder is selected in the bookmark manager. | 59 // folder is selected in the bookmark manager. |
| 53 // This class is taken almost directly from BookmarkManagerView and should be | 60 // This class is taken almost directly from BookmarkManagerView and should be |
| 54 // kept in sync with it. | 61 // kept in sync with it. |
| 55 class ImportObserverImpl : public ImportObserver { | 62 class ImportObserverImpl : public ImportObserver { |
| 56 public: | 63 public: |
| 57 explicit ImportObserverImpl(Profile* profile) : profile_(profile) { | 64 explicit ImportObserverImpl(Profile* profile) : profile_(profile) { |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 delaying_mousedown_(false) { | 277 delaying_mousedown_(false) { |
| 271 InitWidgets(); | 278 InitWidgets(); |
| 272 g_signal_connect(window_, "destroy", | 279 g_signal_connect(window_, "destroy", |
| 273 G_CALLBACK(OnWindowDestroy), this); | 280 G_CALLBACK(OnWindowDestroy), this); |
| 274 | 281 |
| 275 model_->AddObserver(this); | 282 model_->AddObserver(this); |
| 276 if (model_->IsLoaded()) | 283 if (model_->IsLoaded()) |
| 277 Loaded(model_); | 284 Loaded(model_); |
| 278 | 285 |
| 279 gtk_widget_show_all(window_); | 286 gtk_widget_show_all(window_); |
| 287 gtk_tree_view_columns_autosize(GTK_TREE_VIEW(right_tree_view_)); |
| 280 } | 288 } |
| 281 | 289 |
| 282 BookmarkManagerGtk::~BookmarkManagerGtk() { | 290 BookmarkManagerGtk::~BookmarkManagerGtk() { |
| 291 SaveColumnConfiguration(); |
| 283 model_->RemoveObserver(this); | 292 model_->RemoveObserver(this); |
| 284 } | 293 } |
| 285 | 294 |
| 286 void BookmarkManagerGtk::InitWidgets() { | 295 void BookmarkManagerGtk::InitWidgets() { |
| 287 window_ = gtk_window_new(GTK_WINDOW_TOPLEVEL); | 296 window_ = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| 288 gtk_window_set_title(GTK_WINDOW(window_), | 297 gtk_window_set_title(GTK_WINDOW(window_), |
| 289 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_TITLE).c_str()); | 298 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_TITLE).c_str()); |
| 290 // TODO(estade): use dimensions based on | 299 |
| 291 // IDS_BOOKMARK_MANAGER_DIALOG_WIDTH_CHARS and | 300 // Set the default size of the bookmark manager. |
| 292 // IDS_BOOKMARK_MANAGER_DIALOG_HEIGHT_LINES. | 301 // Windows has code to do this that uses ChromeFont; we could share it but |
| 293 gtk_window_set_default_size(GTK_WINDOW(window_), 640, 480); | 302 // since we don't plan to use it elsewhere it's probably not worth the effort. |
| 303 PangoContext* context = gtk_widget_create_pango_context(window_); |
| 304 PangoFontMetrics* metrics = |
| 305 pango_context_get_metrics(context, window_->style->font_desc, |
| 306 pango_context_get_language(context)); |
| 307 double chars = 0; |
| 308 StringToDouble(WideToUTF8(l10n_util::GetString( |
| 309 IDS_BOOKMARK_MANAGER_DIALOG_WIDTH_CHARS)), &chars); |
| 310 int width = |
| 311 pango_font_metrics_get_approximate_char_width(metrics) * |
| 312 static_cast<int>(chars) / PANGO_SCALE; |
| 313 double lines = 0; |
| 314 StringToDouble(WideToUTF8(l10n_util::GetString( |
| 315 IDS_BOOKMARK_MANAGER_DIALOG_HEIGHT_LINES)), &lines); |
| 316 int height = |
| 317 (pango_font_metrics_get_ascent(metrics) + |
| 318 pango_font_metrics_get_descent(metrics)) * |
| 319 static_cast<int>(lines) / PANGO_SCALE; |
| 320 gtk_window_set_default_size(GTK_WINDOW(window_), width, height); |
| 321 pango_font_metrics_unref(metrics); |
| 322 g_object_unref(context); |
| 294 | 323 |
| 295 // Build the organize and tools menus. | 324 // Build the organize and tools menus. |
| 296 organize_ = gtk_menu_item_new_with_label( | 325 organize_ = gtk_menu_item_new_with_label( |
| 297 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_ORGANIZE_MENU).c_str()); | 326 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_ORGANIZE_MENU).c_str()); |
| 298 | 327 |
| 299 GtkWidget* import_item = gtk_menu_item_new_with_mnemonic( | 328 GtkWidget* import_item = gtk_menu_item_new_with_mnemonic( |
| 300 gtk_util::ConvertAcceleratorsFromWindowsStyle( | 329 gtk_util::ConvertAcceleratorsFromWindowsStyle( |
| 301 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_IMPORT_MENU)).c_str()); | 330 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_IMPORT_MENU)).c_str()); |
| 302 g_signal_connect(import_item, "activate", | 331 g_signal_connect(import_item, "activate", |
| 303 G_CALLBACK(OnImportItemActivated), this); | 332 G_CALLBACK(OnImportItemActivated), this); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 331 GtkWidget* hbox = gtk_hbox_new(FALSE, 0); | 360 GtkWidget* hbox = gtk_hbox_new(FALSE, 0); |
| 332 gtk_box_pack_start(GTK_BOX(hbox), menu_bar, FALSE, FALSE, 0); | 361 gtk_box_pack_start(GTK_BOX(hbox), menu_bar, FALSE, FALSE, 0); |
| 333 gtk_box_pack_end(GTK_BOX(hbox), search_entry_, FALSE, FALSE, 0); | 362 gtk_box_pack_end(GTK_BOX(hbox), search_entry_, FALSE, FALSE, 0); |
| 334 gtk_box_pack_end(GTK_BOX(hbox), search_label, FALSE, FALSE, kSearchPadding); | 363 gtk_box_pack_end(GTK_BOX(hbox), search_label, FALSE, FALSE, kSearchPadding); |
| 335 | 364 |
| 336 GtkWidget* left_pane = MakeLeftPane(); | 365 GtkWidget* left_pane = MakeLeftPane(); |
| 337 GtkWidget* right_pane = MakeRightPane(); | 366 GtkWidget* right_pane = MakeRightPane(); |
| 338 | 367 |
| 339 GtkWidget* paned = gtk_hpaned_new(); | 368 GtkWidget* paned = gtk_hpaned_new(); |
| 340 // Set the initial position of the pane divider. | 369 // Set the initial position of the pane divider. |
| 341 // TODO(estade): we should set this to one third of the width of the window | 370 gtk_paned_set_position(GTK_PANED(paned), width / 3); |
| 342 // when it first shows (depending on the WM, this may or may not be the value | |
| 343 // we set below in gtk_window_set_size()). | |
| 344 gtk_paned_set_position(GTK_PANED(paned), 200); | |
| 345 gtk_paned_pack1(GTK_PANED(paned), left_pane, FALSE, FALSE); | 371 gtk_paned_pack1(GTK_PANED(paned), left_pane, FALSE, FALSE); |
| 346 gtk_paned_pack2(GTK_PANED(paned), right_pane, TRUE, FALSE); | 372 gtk_paned_pack2(GTK_PANED(paned), right_pane, TRUE, FALSE); |
| 347 | 373 |
| 348 GtkWidget* vbox = gtk_vbox_new(FALSE, 0); | 374 GtkWidget* vbox = gtk_vbox_new(FALSE, 0); |
| 349 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | 375 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
| 350 gtk_box_pack_start(GTK_BOX(vbox), paned, TRUE, TRUE, 0); | 376 gtk_box_pack_start(GTK_BOX(vbox), paned, TRUE, TRUE, 0); |
| 351 gtk_container_add(GTK_CONTAINER(window_), vbox); | 377 gtk_container_add(GTK_CONTAINER(window_), vbox); |
| 352 | 378 |
| 353 ResetOrganizeMenu(true); | 379 ResetOrganizeMenu(true); |
| 354 } | 380 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 GTK_SHADOW_ETCHED_IN); | 422 GTK_SHADOW_ETCHED_IN); |
| 397 gtk_container_add(GTK_CONTAINER(scrolled), left_tree_view_); | 423 gtk_container_add(GTK_CONTAINER(scrolled), left_tree_view_); |
| 398 | 424 |
| 399 return scrolled; | 425 return scrolled; |
| 400 } | 426 } |
| 401 | 427 |
| 402 GtkWidget* BookmarkManagerGtk::MakeRightPane() { | 428 GtkWidget* BookmarkManagerGtk::MakeRightPane() { |
| 403 right_store_ = gtk_list_store_new(RIGHT_PANE_NUM, | 429 right_store_ = gtk_list_store_new(RIGHT_PANE_NUM, |
| 404 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); | 430 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); |
| 405 | 431 |
| 406 GtkTreeViewColumn* title_column = gtk_tree_view_column_new(); | 432 title_column_ = gtk_tree_view_column_new(); |
| 407 gtk_tree_view_column_set_title(title_column, | 433 gtk_tree_view_column_set_title(title_column_, |
| 408 l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_TITLE).c_str()); | 434 l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_TITLE).c_str()); |
| 409 GtkCellRenderer* image_renderer = gtk_cell_renderer_pixbuf_new(); | 435 GtkCellRenderer* image_renderer = gtk_cell_renderer_pixbuf_new(); |
| 410 gtk_tree_view_column_pack_start(title_column, image_renderer, FALSE); | 436 gtk_tree_view_column_pack_start(title_column_, image_renderer, FALSE); |
| 411 gtk_tree_view_column_add_attribute(title_column, image_renderer, | 437 gtk_tree_view_column_add_attribute(title_column_, image_renderer, |
| 412 "pixbuf", RIGHT_PANE_PIXBUF); | 438 "pixbuf", RIGHT_PANE_PIXBUF); |
| 413 GtkCellRenderer* text_renderer = gtk_cell_renderer_text_new(); | 439 GtkCellRenderer* text_renderer = gtk_cell_renderer_text_new(); |
| 414 gtk_tree_view_column_pack_start(title_column, text_renderer, TRUE); | 440 g_object_set(text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
| 415 gtk_tree_view_column_add_attribute(title_column, text_renderer, | 441 gtk_tree_view_column_pack_start(title_column_, text_renderer, TRUE); |
| 442 gtk_tree_view_column_add_attribute(title_column_, text_renderer, |
| 416 "text", RIGHT_PANE_TITLE); | 443 "text", RIGHT_PANE_TITLE); |
| 417 GtkTreeViewColumn* url_column = gtk_tree_view_column_new_with_attributes( | 444 |
| 445 url_column_ = gtk_tree_view_column_new_with_attributes( |
| 418 l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_URL).c_str(), | 446 l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_URL).c_str(), |
| 419 gtk_cell_renderer_text_new(), "text", RIGHT_PANE_URL, NULL); | 447 text_renderer, "text", RIGHT_PANE_URL, NULL); |
| 448 |
| 420 path_column_ = gtk_tree_view_column_new_with_attributes( | 449 path_column_ = gtk_tree_view_column_new_with_attributes( |
| 421 l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_PATH).c_str(), | 450 l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_PATH).c_str(), |
| 422 gtk_cell_renderer_text_new(), "text", RIGHT_PANE_PATH, NULL); | 451 text_renderer, "text", RIGHT_PANE_PATH, NULL); |
| 452 |
| 453 SizeColumns(); |
| 423 | 454 |
| 424 right_tree_view_ = gtk_tree_view_new_with_model(GTK_TREE_MODEL(right_store_)); | 455 right_tree_view_ = gtk_tree_view_new_with_model(GTK_TREE_MODEL(right_store_)); |
| 425 // Let |tree_view| own the store. | 456 // Let |tree_view| own the store. |
| 426 g_object_unref(right_store_); | 457 g_object_unref(right_store_); |
| 427 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), title_column); | 458 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), title_column_); |
| 428 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), url_column); | 459 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), url_column_); |
| 429 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), path_column_); | 460 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), path_column_); |
| 430 gtk_tree_selection_set_mode(right_selection(), GTK_SELECTION_MULTIPLE); | 461 gtk_tree_selection_set_mode(right_selection(), GTK_SELECTION_MULTIPLE); |
| 431 | 462 |
| 432 g_signal_connect(right_tree_view_, "row-activated", | 463 g_signal_connect(right_tree_view_, "row-activated", |
| 433 G_CALLBACK(OnRightTreeViewRowActivated), this); | 464 G_CALLBACK(OnRightTreeViewRowActivated), this); |
| 434 g_signal_connect(right_selection(), "changed", | 465 g_signal_connect(right_selection(), "changed", |
| 435 G_CALLBACK(OnRightSelectionChanged), this); | 466 G_CALLBACK(OnRightSelectionChanged), this); |
| 436 g_signal_connect(right_tree_view_, "focus-in-event", | 467 g_signal_connect(right_tree_view_, "focus-in-event", |
| 437 G_CALLBACK(OnRightTreeViewFocusIn), this); | 468 G_CALLBACK(OnRightTreeViewFocusIn), this); |
| 438 g_signal_connect(right_tree_view_, "button-press-event", | 469 g_signal_connect(right_tree_view_, "button-press-event", |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 } else { | 671 } else { |
| 641 GtkTreeIter sibling; | 672 GtkTreeIter sibling; |
| 642 gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(right_store_), &sibling, | 673 gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(right_store_), &sibling, |
| 643 NULL, row - 1); | 674 NULL, row - 1); |
| 644 gtk_list_store_insert_after(right_store_, &iter, &sibling); | 675 gtk_list_store_insert_after(right_store_, &iter, &sibling); |
| 645 } | 676 } |
| 646 | 677 |
| 647 SetRightSideColumnValues(row, &iter); | 678 SetRightSideColumnValues(row, &iter); |
| 648 } | 679 } |
| 649 | 680 |
| 681 void BookmarkManagerGtk::SizeColumn(GtkTreeViewColumn* column, |
| 682 const wchar_t* prefname) { |
| 683 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); |
| 684 gtk_tree_view_column_set_resizable(column, TRUE); |
| 685 |
| 686 PrefService* prefs = profile_->GetPrefs(); |
| 687 if (!prefs) |
| 688 return; |
| 689 |
| 690 int width = prefs->GetInteger(prefname); |
| 691 if (width <= 0) |
| 692 width = kDefaultColumnWidth; |
| 693 gtk_tree_view_column_set_fixed_width(column, width); |
| 694 } |
| 695 |
| 696 void BookmarkManagerGtk::SizeColumns() { |
| 697 SizeColumn(title_column_, prefs::kBookmarkTableNameWidth1); |
| 698 SizeColumn(url_column_, prefs::kBookmarkTableURLWidth1); |
| 699 SizeColumn(path_column_, prefs::kBookmarkTablePathWidth); |
| 700 } |
| 701 |
| 702 void BookmarkManagerGtk::SaveColumnConfiguration() { |
| 703 PrefService* prefs = profile_->GetPrefs(); |
| 704 if (!prefs) |
| 705 return; |
| 706 |
| 707 prefs->SetInteger(prefs::kBookmarkTableNameWidth1, |
| 708 gtk_tree_view_column_get_width(title_column_)); |
| 709 prefs->SetInteger(prefs::kBookmarkTableURLWidth1, |
| 710 gtk_tree_view_column_get_width(url_column_)); |
| 711 prefs->SetInteger(prefs::kBookmarkTablePathWidth, |
| 712 gtk_tree_view_column_get_width(path_column_)); |
| 713 } |
| 714 |
| 650 bool BookmarkManagerGtk::RecursiveFind(GtkTreeModel* model, GtkTreeIter* iter, | 715 bool BookmarkManagerGtk::RecursiveFind(GtkTreeModel* model, GtkTreeIter* iter, |
| 651 int target) { | 716 int target) { |
| 652 GValue value = { 0, }; | 717 GValue value = { 0, }; |
| 653 bool left = model == GTK_TREE_MODEL(left_store_); | 718 bool left = model == GTK_TREE_MODEL(left_store_); |
| 654 if (left) { | 719 if (left) { |
| 655 if (iter->stamp == 0) | 720 if (iter->stamp == 0) |
| 656 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(left_store_), iter); | 721 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(left_store_), iter); |
| 657 gtk_tree_model_get_value(model, iter, bookmark_utils::ITEM_ID, &value); | 722 gtk_tree_model_get_value(model, iter, bookmark_utils::ITEM_ID, &value); |
| 658 } | 723 } |
| 659 else { | 724 else { |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 } else if (id == IDS_BOOKMARK_MANAGER_EXPORT_MENU) { | 1160 } else if (id == IDS_BOOKMARK_MANAGER_EXPORT_MENU) { |
| 1096 if (g_browser_process->io_thread()) { | 1161 if (g_browser_process->io_thread()) { |
| 1097 bookmark_html_writer::WriteBookmarks( | 1162 bookmark_html_writer::WriteBookmarks( |
| 1098 g_browser_process->io_thread()->message_loop(), model_, | 1163 g_browser_process->io_thread()->message_loop(), model_, |
| 1099 path.ToWStringHack()); | 1164 path.ToWStringHack()); |
| 1100 } | 1165 } |
| 1101 } else { | 1166 } else { |
| 1102 NOTREACHED(); | 1167 NOTREACHED(); |
| 1103 } | 1168 } |
| 1104 } | 1169 } |
| OLD | NEW |