Index: chrome/browser/importer/external_process_importer_client.h |
diff --git a/chrome/browser/importer/external_process_importer_client.h b/chrome/browser/importer/external_process_importer_client.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0cb54844e9f37221a1878273ee83137120ca784c |
--- /dev/null |
+++ b/chrome/browser/importer/external_process_importer_client.h |
@@ -0,0 +1,164 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_IMPORTER_EXTERNAL_PROCESS_IMPORTER_CLIENT_H_ |
+#define CHROME_BROWSER_IMPORTER_EXTERNAL_PROCESS_IMPORTER_CLIENT_H_ |
+#pragma once |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/compiler_specific.h" |
+#include "chrome/browser/importer/profile_writer.h" |
+#include "chrome/browser/profile_import_process_host.h" |
+ |
+class ExternalProcessImporterHost; |
+class InProcessImporterBridge; |
+ |
+namespace history { |
+class URLRow; |
+struct ImportedFavIconUsage; |
+} |
+ |
+namespace importer { |
+struct ProfileInfo; |
+} |
+ |
+// This class is the client for the ProfileImportProcessHost. It collects |
+// notifications from this process host and feeds data back to the importer |
+// host, who actually does the writing. |
+class ExternalProcessImporterClient |
+ : public ProfileImportProcessHost::ImportProcessClient { |
+ public: |
+ ExternalProcessImporterClient(ExternalProcessImporterHost* importer_host, |
+ const importer::ProfileInfo& profile_info, |
+ uint16 items, |
+ InProcessImporterBridge* bridge, |
+ bool import_to_bookmark_bar); |
+ virtual ~ExternalProcessImporterClient(); |
+ |
+ // Cancel import process on IO thread. |
+ void CancelImportProcessOnIOThread(); |
+ |
+ // Report item completely downloaded on IO thread. |
+ void NotifyItemFinishedOnIOThread(importer::ImportItem import_item); |
+ |
+ // Notifies the importerhost that import has finished, and calls Release(). |
+ void Cleanup(); |
+ |
+ // Launches the task to start the external process. |
+ virtual void Start(); |
+ |
+ // Creates a new ProfileImportProcessHost, which launches the import process. |
+ virtual void StartProcessOnIOThread(ResourceDispatcherHost* rdh, |
+ BrowserThread::ID thread_id); |
+ |
+ // Called by the ExternalProcessImporterHost on import cancel. |
+ virtual void Cancel(); |
+ |
+ // Begin ProfileImportProcessHost::ImportProcessClient implementation. |
+ virtual void OnProcessCrashed(int exit_status) OVERRIDE; |
+ virtual void OnImportStart() OVERRIDE; |
+ virtual void OnImportFinished(bool succeeded, std::string error_msg) OVERRIDE; |
+ virtual void OnImportItemStart(int item) OVERRIDE; |
+ virtual void OnImportItemFinished(int item) OVERRIDE; |
+ |
+ // Called on first message received when importing history; gives total |
+ // number of rows to be imported. |
+ virtual void OnHistoryImportStart(size_t total_history_rows_count) OVERRIDE; |
+ |
+ // Called when a group of URLRows has been received. |
+ // The source is passed with history::VisitSource type. |
+ virtual void OnHistoryImportGroup( |
+ const std::vector<history::URLRow> &history_rows_group, |
+ int visit_source) OVERRIDE; |
+ |
+ // Called when the home page has been received. |
+ virtual void OnHomePageImportReady(const GURL& home_page) OVERRIDE; |
+ |
+ // First message received when importing bookmarks. |
+ // |first_folder_name| can be NULL. |
+ // |options| is described in ProfileWriter::BookmarkOptions. |
+ // |total_bookmarks_count| is the total number of bookmarks to be imported. |
+ virtual void OnBookmarksImportStart(const std::wstring first_folder_name, |
+ int options, |
+ size_t total_bookmarks_count) OVERRIDE; |
+ |
+ // Called when a group of bookmarks has been received. |
+ virtual void OnBookmarksImportGroup( |
+ const std::vector<ProfileWriter::BookmarkEntry>& bookmarks_group) |
+ OVERRIDE; |
+ |
+ // First message received when importing favicons. |total_fav_icons_size| |
+ // gives the total number of fav icons to be imported. |
+ virtual void OnFavIconsImportStart(size_t total_fav_icons_count) OVERRIDE; |
+ |
+ // Called when a group of favicons has been received. |
+ virtual void OnFavIconsImportGroup( |
+ const std::vector<history::ImportedFavIconUsage>& fav_icons_group) |
+ OVERRIDE; |
+ |
+ // Called when the passwordform has been received. |
+ virtual void OnPasswordFormImportReady( |
+ const webkit_glue::PasswordForm& form) OVERRIDE; |
+ |
+ // Called when search engines have been received. |
+ virtual void OnKeywordsImportReady( |
+ const std::vector<TemplateURL>& template_urls, |
+ int default_keyword_index, |
+ bool unique_on_host_and_path) OVERRIDE; |
+ |
+ // End ProfileImportProcessHost::ImportProcessClient implementation. |
+ |
+ private: |
+ // These variables store data being collected from the importer until the |
+ // entire group has been collected and is ready to be written to the profile. |
+ std::vector<history::URLRow> history_rows_; |
+ std::vector<ProfileWriter::BookmarkEntry> bookmarks_; |
+ std::vector<history::ImportedFavIconUsage> fav_icons_; |
+ |
+ // Usually some variation on IDS_BOOKMARK_GROUP_...; the name of the folder |
+ // under which imported bookmarks will be placed. |
+ std::wstring bookmarks_first_folder_name_; |
+ |
+ // Determines how bookmarks should be added (ProfileWriter::BookmarkOptions). |
+ int bookmarks_options_; |
+ |
+ // Total number of bookmarks to import. |
+ size_t total_bookmarks_count_; |
+ |
+ // Total number of history items to import. |
+ size_t total_history_rows_count_; |
+ |
+ // Total number of fav icons to import. |
+ size_t total_fav_icons_count_; |
+ |
+ // Notifications received from the ProfileImportProcessHost are passed back |
+ // to process_importer_host_, which calls the ProfileWriter to record the |
+ // import data. When the import process is done, process_importer_host_ |
+ // deletes itself. |
+ ExternalProcessImporterHost* process_importer_host_; |
+ |
+ // Handles sending messages to the external process. Deletes itself when |
+ // the external process dies (see ChildProcessHost::OnChildDied). |
+ ProfileImportProcessHost* profile_import_process_host_; |
+ |
+ // Data to be passed from the importer host to the external importer. |
+ const importer::ProfileInfo& profile_info_; |
+ uint16 items_; |
+ bool import_to_bookmark_bar_; |
+ |
+ // Takes import data coming over IPC and delivers it to be written by the |
+ // ProfileWriter. Released by ExternalProcessImporterClient in its |
+ // destructor. |
+ InProcessImporterBridge* bridge_; |
+ |
+ // True if import process has been cancelled. |
+ bool cancelled_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ExternalProcessImporterClient); |
+}; |
+ |
+#endif // CHROME_BROWSER_IMPORTER_EXTERNAL_PROCESS_IMPORTER_CLIENT_H_ |