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.
5 #ifndef CHROME_BROWSER_IMPORTER_EXTERNAL_PROCESS_IMPORTER_HOST_H_
6 #define CHROME_BROWSER_IMPORTER_EXTERNAL_PROCESS_IMPORTER_HOST_H_
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/weak_ptr.h"
13 #include "chrome/browser/importer/importer_progress_observer.h"
14 #include "chrome/browser/importer/profile_writer.h"
15 #include "chrome/browser/search_engines/template_url_service.h"
16 #include "chrome/common/importer/importer_data_types.h"
17 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
18 #include "ui/gfx/native_widget_types.h"
20 class ExternalProcessImporterClient
;
21 class FirefoxProfileLock
;
29 // This class manages the import process. It creates the in-process half of the
30 // importer bridge and the external process importer client.
31 class ExternalProcessImporterHost
: public BaseBookmarkModelObserver
{
33 ExternalProcessImporterHost();
37 // Starts the process of importing the settings and data depending on what the
39 // |source_profile| - importer profile to import.
40 // |target_profile| - profile to import into.
41 // |items| - specifies which data to import (bitmask of importer::ImportItem).
42 // |writer| - called to actually write data back to the profile.
43 virtual void StartImportSettings(
44 const importer::SourceProfile
& source_profile
,
45 Profile
* target_profile
,
47 ProfileWriter
* writer
);
49 // When in headless mode, the importer will not show any warning dialog if
50 // a user action is required (e.g., Firefox profile is locked and user should
51 // close Firefox to continue) and the outcome is as if the user had canceled
52 // the import operation.
53 void set_headless() { headless_
= true; }
54 bool is_headless() const { return headless_
; }
56 void set_parent_window(gfx::NativeWindow parent_window
) {
57 parent_window_
= parent_window
;
60 void set_observer(importer::ImporterProgressObserver
* observer
) {
64 // A series of functions invoked at the start, during and end of the import
65 // process. The middle functions are notifications that the a harvesting of a
66 // particular source of data (specified by |item|) is under way.
67 void NotifyImportStarted();
68 void NotifyImportItemStarted(importer::ImportItem item
);
69 void NotifyImportItemEnded(importer::ImportItem item
);
70 void NotifyImportEnded();
73 // ExternalProcessImporterHost deletes itself in OnImportEnded().
74 virtual ~ExternalProcessImporterHost();
76 // Launches the utility process that starts the import task, unless bookmark
77 // or template model are not yet loaded. If load is not detected, this method
78 // will be called when the loading observer sees that model loading is
80 virtual void LaunchImportIfReady();
82 // BaseBookmarkModelObserver:
83 virtual void BookmarkModelLoaded(BookmarkModel
* model
,
84 bool ids_reassigned
) OVERRIDE
;
85 virtual void BookmarkModelBeingDeleted(BookmarkModel
* model
) OVERRIDE
;
86 virtual void BookmarkModelChanged() OVERRIDE
;
88 // Called when TemplateURLService has been loaded.
89 void OnTemplateURLServiceLoaded();
91 // ShowWarningDialog() asks user to close the application that is owning the
92 // lock. They can retry or skip the importing process.
93 // This method should not be called if the importer is in headless mode.
94 void ShowWarningDialog();
96 // This is called when when user ends the lock dialog by clicking on either
97 // the "Skip" or "Continue" buttons. |is_continue| is true when user clicked
98 // the "Continue" button.
99 void OnImportLockDialogEnd(bool is_continue
);
101 // Make sure that Firefox isn't running, if import browser is Firefox. Show
102 // to the user a dialog that notifies that is necessary to close Firefox
103 // prior to continue.
104 // |source_profile| - importer profile to import.
105 // Returns false iff import should be aborted.
106 bool CheckForFirefoxLock(const importer::SourceProfile
& source_profile
);
108 // Make sure BookmarkModel and TemplateURLService are loaded before import
109 // process starts, if bookmarks and/or search engines are among the items
110 // which are to be imported.
111 void CheckForLoadedModels(uint16 items
);
113 // True if UI is not to be shown.
116 // Parent window that we pass to the import lock dialog (i.e, the Firefox
118 gfx::NativeWindow parent_window_
;
120 // The observer that we need to notify about changes in the import process.
121 importer::ImporterProgressObserver
* observer_
;
123 // Firefox profile lock.
124 scoped_ptr
<FirefoxProfileLock
> firefox_lock_
;
126 // Profile we're importing from.
129 // True if we're waiting for the model to finish loading.
130 bool waiting_for_bookmarkbar_model_
;
132 // May contain a Subscription waiting for the TemplateURLService to finish
134 scoped_ptr
<TemplateURLService::Subscription
> template_service_subscription_
;
136 // Have we installed a listener on the bookmark model?
137 bool installed_bookmark_observer_
;
139 // True if source profile is readable.
140 bool is_source_readable_
;
142 // Writes data from the importer back to the profile.
143 scoped_refptr
<ProfileWriter
> writer_
;
145 // Used to pass notifications from the browser side to the external process.
146 ExternalProcessImporterClient
* client_
;
148 // Information about a profile needed for importing.
149 importer::SourceProfile source_profile_
;
151 // Bitmask of items to be imported (see importer::ImportItem enum).
154 // True if the import process has been cancelled.
157 // Vends weak pointers for the importer to call us back.
158 base::WeakPtrFactory
<ExternalProcessImporterHost
> weak_ptr_factory_
;
160 DISALLOW_COPY_AND_ASSIGN(ExternalProcessImporterHost
);
163 #endif // CHROME_BROWSER_IMPORTER_EXTERNAL_PROCESS_IMPORTER_HOST_H_