Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: chrome/browser/ui/webui/options/import_data_handler.cc

Issue 24195005: Fix ImportDataHandler crash. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/webui/options/import_data_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/webui/options/import_data_handler.h" 5 #include "chrome/browser/ui/webui/options/import_data_handler.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 void ImportDataHandler::RegisterMessages() { 79 void ImportDataHandler::RegisterMessages() {
80 web_ui()->RegisterMessageCallback( 80 web_ui()->RegisterMessageCallback(
81 "importData", 81 "importData",
82 base::Bind(&ImportDataHandler::ImportData, base::Unretained(this))); 82 base::Bind(&ImportDataHandler::ImportData, base::Unretained(this)));
83 web_ui()->RegisterMessageCallback( 83 web_ui()->RegisterMessageCallback(
84 "chooseBookmarksFile", 84 "chooseBookmarksFile",
85 base::Bind(&ImportDataHandler::HandleChooseBookmarksFile, 85 base::Bind(&ImportDataHandler::HandleChooseBookmarksFile,
86 base::Unretained(this))); 86 base::Unretained(this)));
87 } 87 }
88 88
89 void ImportDataHandler::StartImport(
90 const importer::SourceProfile& source_profile,
91 uint16 imported_items) {
92 if (!imported_items)
93 return;
94
95 // If another import is already ongoing, let it finish silently.
96 if (importer_host_)
97 importer_host_->set_observer(NULL);
98
99 base::FundamentalValue importing(true);
100 web_ui()->CallJavascriptFunction("ImportDataOverlay.setImportingState",
101 importing);
102 import_did_succeed_ = false;
103
104 importer_host_ = new ExternalProcessImporterHost();
105 importer_host_->set_observer(this);
106 Profile* profile = Profile::FromWebUI(web_ui());
107 importer_host_->StartImportSettings(source_profile, profile,
108 imported_items,
109 new ProfileWriter(profile));
110
111 importer::LogImporterUseToMetrics("ImportDataHandler",
112 source_profile.importer_type);
113 }
114
89 void ImportDataHandler::ImportData(const ListValue* args) { 115 void ImportDataHandler::ImportData(const ListValue* args) {
90 std::string string_value; 116 std::string string_value;
91 117
92 int browser_index; 118 int browser_index;
93 if (!args->GetString(0, &string_value) || 119 if (!args->GetString(0, &string_value) ||
94 !base::StringToInt(string_value, &browser_index)) { 120 !base::StringToInt(string_value, &browser_index)) {
95 NOTREACHED(); 121 NOTREACHED();
96 return; 122 return;
97 } 123 }
98 124
99 uint16 selected_items = importer::NONE; 125 uint16 selected_items = importer::NONE;
100 if (args->GetString(1, &string_value) && string_value == "true") { 126 if (args->GetString(1, &string_value) && string_value == "true") {
101 selected_items |= importer::HISTORY; 127 selected_items |= importer::HISTORY;
102 } 128 }
103 if (args->GetString(2, &string_value) && string_value == "true") { 129 if (args->GetString(2, &string_value) && string_value == "true") {
104 selected_items |= importer::FAVORITES; 130 selected_items |= importer::FAVORITES;
105 } 131 }
106 if (args->GetString(3, &string_value) && string_value == "true") { 132 if (args->GetString(3, &string_value) && string_value == "true") {
107 selected_items |= importer::PASSWORDS; 133 selected_items |= importer::PASSWORDS;
108 } 134 }
109 if (args->GetString(4, &string_value) && string_value == "true") { 135 if (args->GetString(4, &string_value) && string_value == "true") {
110 selected_items |= importer::SEARCH_ENGINES; 136 selected_items |= importer::SEARCH_ENGINES;
111 } 137 }
112 138
113 const importer::SourceProfile& source_profile = 139 const importer::SourceProfile& source_profile =
114 importer_list_->GetSourceProfileAt(browser_index); 140 importer_list_->GetSourceProfileAt(browser_index);
115 uint16 supported_items = source_profile.services_supported; 141 uint16 supported_items = source_profile.services_supported;
116 142
117 uint16 import_services = (selected_items & supported_items); 143 uint16 imported_items = (selected_items & supported_items);
118 if (import_services) { 144 if (imported_items) {
119 base::FundamentalValue state(true); 145 StartImport(source_profile, imported_items);
120 web_ui()->CallJavascriptFunction("ImportDataOverlay.setImportingState",
121 state);
122 import_did_succeed_ = false;
123
124 importer_host_ = new ExternalProcessImporterHost();
125 importer_host_->set_observer(this);
126 Profile* profile = Profile::FromWebUI(web_ui());
127 importer_host_->StartImportSettings(source_profile, profile,
128 import_services,
129 new ProfileWriter(profile));
130
131 importer::LogImporterUseToMetrics("ImportDataHandler",
132 source_profile.importer_type);
133 } else { 146 } else {
134 LOG(WARNING) << "There were no settings to import from '" 147 LOG(WARNING) << "There were no settings to import from '"
135 << source_profile.importer_name << "'."; 148 << source_profile.importer_name << "'.";
136 } 149 }
137 } 150 }
138 151
139 void ImportDataHandler::OnSourceProfilesLoaded() { 152 void ImportDataHandler::OnSourceProfilesLoaded() {
140 InitializePage(); 153 InitializePage();
141 } 154 }
142 155
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 web_ui()->CallJavascriptFunction("ImportDataOverlay.confirmSuccess"); 209 web_ui()->CallJavascriptFunction("ImportDataOverlay.confirmSuccess");
197 } else { 210 } else {
198 base::FundamentalValue state(false); 211 base::FundamentalValue state(false);
199 web_ui()->CallJavascriptFunction("ImportDataOverlay.setImportingState", 212 web_ui()->CallJavascriptFunction("ImportDataOverlay.setImportingState",
200 state); 213 state);
201 web_ui()->CallJavascriptFunction("ImportDataOverlay.dismiss"); 214 web_ui()->CallJavascriptFunction("ImportDataOverlay.dismiss");
202 } 215 }
203 } 216 }
204 217
205 void ImportDataHandler::FileSelected(const base::FilePath& path, 218 void ImportDataHandler::FileSelected(const base::FilePath& path,
206 int index, 219 int /*index*/,
207 void* params) { 220 void* /*params*/) {
208 base::FundamentalValue importing(true);
209 web_ui()->CallJavascriptFunction("ImportDataOverlay.setImportingState",
210 importing);
211 import_did_succeed_ = false;
212
213 importer_host_ = new ExternalProcessImporterHost();
214 importer_host_->set_observer(this);
215 221
216 importer::SourceProfile source_profile; 222 importer::SourceProfile source_profile;
217 source_profile.importer_type = importer::TYPE_BOOKMARKS_FILE; 223 source_profile.importer_type = importer::TYPE_BOOKMARKS_FILE;
218 source_profile.source_path = path; 224 source_profile.source_path = path;
219 225
220 Profile* profile = Profile::FromWebUI(web_ui()); 226 StartImport(source_profile, importer::FAVORITES);
221
222 importer_host_->StartImportSettings(
223 source_profile, profile, importer::FAVORITES, new ProfileWriter(profile));
224 } 227 }
225 228
226 void ImportDataHandler::HandleChooseBookmarksFile(const base::ListValue* args) { 229 void ImportDataHandler::HandleChooseBookmarksFile(const base::ListValue* args) {
227 DCHECK(args && args->empty()); 230 DCHECK(args && args->empty());
228 select_file_dialog_ = ui::SelectFileDialog::Create( 231 select_file_dialog_ = ui::SelectFileDialog::Create(
229 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); 232 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
230 233
231 ui::SelectFileDialog::FileTypeInfo file_type_info; 234 ui::SelectFileDialog::FileTypeInfo file_type_info;
232 file_type_info.extensions.resize(1); 235 file_type_info.extensions.resize(1);
233 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("html")); 236 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("html"));
234 237
235 Browser* browser = 238 Browser* browser =
236 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); 239 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents());
237 240
238 select_file_dialog_->SelectFile(ui::SelectFileDialog::SELECT_OPEN_FILE, 241 select_file_dialog_->SelectFile(ui::SelectFileDialog::SELECT_OPEN_FILE,
239 base::string16(), 242 base::string16(),
240 base::FilePath(), 243 base::FilePath(),
241 &file_type_info, 244 &file_type_info,
242 0, 245 0,
243 base::FilePath::StringType(), 246 base::FilePath::StringType(),
244 browser->window()->GetNativeWindow(), 247 browser->window()->GetNativeWindow(),
245 NULL); 248 NULL);
246 } 249 }
247 250
248 } // namespace options 251 } // namespace options
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/options/import_data_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698