| OLD | NEW |
| 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/first_run/first_run.h" | 5 #include "chrome/browser/first_run/first_run.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <shellapi.h> | 8 #include <shellapi.h> |
| 9 #include <shlobj.h> | 9 #include <shlobj.h> |
| 10 | 10 |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 // process. | 178 // process. |
| 179 class ImportProcessRunner : public base::win::ObjectWatcher::Delegate { | 179 class ImportProcessRunner : public base::win::ObjectWatcher::Delegate { |
| 180 public: | 180 public: |
| 181 // The constructor takes the importer process to watch and then it does a | 181 // The constructor takes the importer process to watch and then it does a |
| 182 // message loop blocking wait until the process ends. This object now owns | 182 // message loop blocking wait until the process ends. This object now owns |
| 183 // the import_process handle. | 183 // the import_process handle. |
| 184 explicit ImportProcessRunner(base::ProcessHandle import_process) | 184 explicit ImportProcessRunner(base::ProcessHandle import_process) |
| 185 : import_process_(import_process), | 185 : import_process_(import_process), |
| 186 exit_code_(content::RESULT_CODE_NORMAL_EXIT) { | 186 exit_code_(content::RESULT_CODE_NORMAL_EXIT) { |
| 187 watcher_.StartWatching(import_process, this); | 187 watcher_.StartWatching(import_process, this); |
| 188 MessageLoop::current()->Run(); | 188 base::MessageLoop::current()->Run(); |
| 189 } | 189 } |
| 190 virtual ~ImportProcessRunner() { | 190 virtual ~ImportProcessRunner() { |
| 191 ::CloseHandle(import_process_); | 191 ::CloseHandle(import_process_); |
| 192 } | 192 } |
| 193 // Returns the child process exit code. There are 2 expected values: | 193 // Returns the child process exit code. There are 2 expected values: |
| 194 // NORMAL_EXIT, or IMPORTER_HUNG. | 194 // NORMAL_EXIT, or IMPORTER_HUNG. |
| 195 int exit_code() const { return exit_code_; } | 195 int exit_code() const { return exit_code_; } |
| 196 | 196 |
| 197 // The child process has terminated. Find the exit code and quit the loop. | 197 // The child process has terminated. Find the exit code and quit the loop. |
| 198 virtual void OnObjectSignaled(HANDLE object) OVERRIDE { | 198 virtual void OnObjectSignaled(HANDLE object) OVERRIDE { |
| 199 DCHECK(object == import_process_); | 199 DCHECK(object == import_process_); |
| 200 if (!::GetExitCodeProcess(import_process_, &exit_code_)) { | 200 if (!::GetExitCodeProcess(import_process_, &exit_code_)) { |
| 201 NOTREACHED(); | 201 NOTREACHED(); |
| 202 } | 202 } |
| 203 MessageLoop::current()->Quit(); | 203 base::MessageLoop::current()->Quit(); |
| 204 } | 204 } |
| 205 | 205 |
| 206 private: | 206 private: |
| 207 base::win::ObjectWatcher watcher_; | 207 base::win::ObjectWatcher watcher_; |
| 208 base::ProcessHandle import_process_; | 208 base::ProcessHandle import_process_; |
| 209 DWORD exit_code_; | 209 DWORD exit_code_; |
| 210 }; | 210 }; |
| 211 | 211 |
| 212 // Check every 3 seconds if the importer UI has hung. | 212 // Check every 3 seconds if the importer UI has hung. |
| 213 const int kPollHangFrequency = 3000; | 213 const int kPollHangFrequency = 3000; |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 importer_host->set_headless(); | 307 importer_host->set_headless(); |
| 308 | 308 |
| 309 first_run::internal::ImportEndedObserver observer; | 309 first_run::internal::ImportEndedObserver observer; |
| 310 importer_host->SetObserver(&observer); | 310 importer_host->SetObserver(&observer); |
| 311 importer_host->StartImportSettings( | 311 importer_host->StartImportSettings( |
| 312 importer_list->GetSourceProfileForImporterType(importer_type), profile, | 312 importer_list->GetSourceProfileForImporterType(importer_type), profile, |
| 313 static_cast<uint16>(items_to_import), new ProfileWriter(profile)); | 313 static_cast<uint16>(items_to_import), new ProfileWriter(profile)); |
| 314 // If the import process has not errored out, block on it. | 314 // If the import process has not errored out, block on it. |
| 315 if (!observer.ended()) { | 315 if (!observer.ended()) { |
| 316 observer.set_should_quit_message_loop(); | 316 observer.set_should_quit_message_loop(); |
| 317 MessageLoop::current()->Run(); | 317 base::MessageLoop::current()->Run(); |
| 318 } | 318 } |
| 319 // TODO(gab): This method will be go away as part of http://crbug.com/219419/, | 319 // TODO(gab): This method will be go away as part of http://crbug.com/219419/, |
| 320 // so it is fine to hardcode |RESULT_CODE_NORMAL_EXIT| here for now. | 320 // so it is fine to hardcode |RESULT_CODE_NORMAL_EXIT| here for now. |
| 321 return content::RESULT_CODE_NORMAL_EXIT; | 321 return content::RESULT_CODE_NORMAL_EXIT; |
| 322 } | 322 } |
| 323 #endif // !defined(USE_AURA) | 323 #endif // !defined(USE_AURA) |
| 324 | 324 |
| 325 bool ImportSettingsWin(Profile* profile, | 325 bool ImportSettingsWin(Profile* profile, |
| 326 int importer_type, | 326 int importer_type, |
| 327 int items_to_import, | 327 int items_to_import, |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 int return_code = internal::ImportBookmarkFromFileIfNeeded(profile, cmdline); | 514 int return_code = internal::ImportBookmarkFromFileIfNeeded(profile, cmdline); |
| 515 #if !defined(USE_AURA) | 515 #if !defined(USE_AURA) |
| 516 if (cmdline.HasSwitch(switches::kImport)) { | 516 if (cmdline.HasSwitch(switches::kImport)) { |
| 517 return_code = ImportFromBrowser(profile, cmdline); | 517 return_code = ImportFromBrowser(profile, cmdline); |
| 518 } | 518 } |
| 519 #endif | 519 #endif |
| 520 return return_code; | 520 return return_code; |
| 521 } | 521 } |
| 522 | 522 |
| 523 } // namespace first_run | 523 } // namespace first_run |
| OLD | NEW |