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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_UTILITY_IMPORTER_EXTERNAL_PROCESS_IMPORTER_BRIDGE_H_ 6 #define CHROME_UTILITY_IMPORTER_EXTERNAL_PROCESS_IMPORTER_BRIDGE_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/compiler_specific.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "chrome/common/importer/importer_bridge.h" 15 16 class GURL; 17 struct ImportedBookmarkEntry; 18 19 namespace base { 20 class DictionaryValue; 21 class TaskRunner; 22 } 23 24 namespace importer { 25 #if defined(OS_WIN) 26 struct ImporterIE7PasswordInfo; 27 #endif 28 struct ImporterURLRow; 29 struct URLKeywordInfo; 30 } 31 32 namespace IPC { 33 class Message; 34 class Sender; 35 } 36 37 // When the importer is run in an external process, the bridge is effectively 38 // split in half by the IPC infrastructure. The external bridge receives data 39 // and notifications from the importer, and sends it across IPC. The 40 // internal bridge gathers the data from the IPC host and writes it to the 41 // profile. 42 class ExternalProcessImporterBridge : public ImporterBridge { 43 public: 44 ExternalProcessImporterBridge( 45 const base::DictionaryValue& localized_strings, 46 IPC::Sender* sender, 47 base::TaskRunner* task_runner); 48 49 // Begin ImporterBridge implementation: 50 virtual void AddBookmarks( 51 const std::vector<ImportedBookmarkEntry>& bookmarks, 52 const string16& first_folder_name) OVERRIDE; 53 54 virtual void AddHomePage(const GURL& home_page) OVERRIDE; 55 56 #if defined(OS_WIN) 57 virtual void AddIE7PasswordInfo( 58 const importer::ImporterIE7PasswordInfo& password_info) OVERRIDE; 59 #endif 60 61 virtual void SetFavicons( 62 const std::vector<ImportedFaviconUsage>& favicons) OVERRIDE; 63 64 virtual void SetHistoryItems(const std::vector<ImporterURLRow>& rows, 65 importer::VisitSource visit_source) OVERRIDE; 66 67 virtual void SetKeywords( 68 const std::vector<importer::URLKeywordInfo>& url_keywords, 69 bool unique_on_host_and_path) OVERRIDE; 70 71 virtual void SetFirefoxSearchEnginesXMLData( 72 const std::vector<std::string>& seach_engine_data) OVERRIDE; 73 74 virtual void SetPasswordForm( 75 const content::PasswordForm& form) OVERRIDE; 76 77 virtual void NotifyStarted() OVERRIDE; 78 virtual void NotifyItemStarted(importer::ImportItem item) OVERRIDE; 79 virtual void NotifyItemEnded(importer::ImportItem item) OVERRIDE; 80 virtual void NotifyEnded() OVERRIDE; 81 82 virtual string16 GetLocalizedString(int message_id) OVERRIDE; 83 // End ImporterBridge implementation. 84 85 private: 86 virtual ~ExternalProcessImporterBridge(); 87 88 void Send(IPC::Message* message); 89 void SendInternal(IPC::Message* message); 90 91 // Holds strings needed by the external importer because the resource 92 // bundle isn't available to the external process. 93 scoped_ptr<base::DictionaryValue> localized_strings_; 94 95 IPC::Sender* sender_; 96 scoped_refptr<base::TaskRunner> task_runner_; 97 98 DISALLOW_COPY_AND_ASSIGN(ExternalProcessImporterBridge); 99 }; 100 101 #endif // CHROME_UTILITY_IMPORTER_EXTERNAL_PROCESS_IMPORTER_BRIDGE_H_ 102