Index: chrome/browser/importer.h |
=================================================================== |
--- chrome/browser/importer.h (revision 2150) |
+++ chrome/browser/importer.h (working copy) |
@@ -1,357 +0,0 @@ |
-// Copyright (c) 2006-2008 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_H_ |
-#define CHROME_BROWSER_IMPORTER_H_ |
- |
-#include <set> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/message_loop.h" |
-#include "base/ref_counted.h" |
-#include "chrome/browser/bookmarks/bookmark_model.h" |
-#include "chrome/browser/history/history_types.h" |
-#include "chrome/browser/ie7_password.h" |
-#include "chrome/browser/profile.h" |
-#include "chrome/browser/template_url.h" |
-#include "chrome/browser/views/importer_lock_view.h" |
-#include "chrome/common/notification_service.h" |
-#include "googleurl/src/gurl.h" |
-#include "webkit/glue/password_form.h" |
- |
-// An enumeration of the type of browsers that we support to import |
-// settings and data from them. |
-enum ProfileType { |
- MS_IE = 0, |
- FIREFOX2, |
- FIREFOX3 |
-}; |
- |
-// An enumeration of the type of data we want to import. |
-enum ImportItem { |
- NONE = 0x0000, |
- HISTORY = 0x0001, |
- FAVORITES = 0x0002, |
- COOKIES = 0x0004, // not supported yet. |
- PASSWORDS = 0x0008, |
- SEARCH_ENGINES = 0x0010, |
- HOME_PAGE = 0x0020, |
-}; |
- |
-typedef struct { |
- std::wstring description; |
- ProfileType browser_type; |
- std::wstring source_path; |
- std::wstring app_path; |
-} ProfileInfo; |
- |
-class FirefoxProfileLock; |
-class Importer; |
- |
-// ProfileWriter encapsulates profile for writing entries into it. |
-// This object must be invoked on UI thread. |
-class ProfileWriter : public base::RefCounted<ProfileWriter> { |
- public: |
- explicit ProfileWriter(Profile* profile) : profile_(profile) { } |
- virtual ~ProfileWriter() { } |
- |
- // Methods for monitoring BookmarkModel status. |
- virtual bool BookmarkModelIsLoaded() const; |
- virtual void AddBookmarkModelObserver( |
- BookmarkModelObserver* observer); |
- |
- // Methods for monitoring TemplateURLModel status. |
- virtual bool TemplateURLModelIsLoaded() const; |
- virtual void AddTemplateURLModelObserver( |
- NotificationObserver* observer); |
- |
- // A bookmark entry. |
- struct BookmarkEntry { |
- bool in_toolbar; |
- GURL url; |
- std::vector<std::wstring> path; |
- std::wstring title; |
- Time creation_time; |
- |
- BookmarkEntry() : in_toolbar(false) {} |
- }; |
- |
- // Helper methods for adding data to local stores. |
- virtual void AddPasswordForm(const PasswordForm& form); |
- virtual void AddIE7PasswordInfo(const IE7PasswordInfo& info); |
- virtual void AddHistoryPage(const std::vector<history::URLRow>& page); |
- virtual void AddHomepage(const GURL& homepage); |
- virtual void AddBookmarkEntry(const std::vector<BookmarkEntry>& bookmark); |
- virtual void AddFavicons( |
- const std::vector<history::ImportedFavIconUsage>& favicons); |
- // Add the TemplateURLs in |template_urls| to the local store and make the |
- // TemplateURL at |default_keyword_index| the default keyword (does not set |
- // a default keyword if it is -1). The local store becomes the owner of the |
- // TemplateURLs. Some TemplateURLs in |template_urls| may conflict (same |
- // keyword or same host name in the URL) with existing TemplateURLs in the |
- // local store, in which case the existing ones takes precedence and the |
- // duplicate in |template_urls| are deleted. |
- // If unique_on_host_and_path a TemplateURL is only added if there is not an |
- // existing TemplateURL that has a replaceable search url with the same |
- // host+path combination. |
- virtual void AddKeywords(const std::vector<TemplateURL*>& template_urls, |
- int default_keyword_index, |
- bool unique_on_host_and_path); |
- |
- // Shows the bookmarks toolbar. |
- void ShowBookmarkBar(); |
- |
- private: |
- Profile* profile_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(ProfileWriter); |
-}; |
- |
-// This class hosts the importers. It enumerates profiles from other |
-// browsers dynamically, and controls the process of importing. When |
-// the import process is done, ImporterHost deletes itself. |
-class ImporterHost : public base::RefCounted<ImporterHost>, |
- public BookmarkModelObserver, |
- public NotificationObserver { |
- public: |
- ImporterHost(); |
- ~ImporterHost(); |
- |
- // This constructor only be used by unit-tests, where file thread does not |
- // exist. |
- explicit ImporterHost(MessageLoop* file_loop); |
- |
- // BookmarkModelObserver methods. |
- virtual void Loaded(BookmarkModel* model); |
- virtual void BookmarkNodeMoved(BookmarkModel* model, |
- BookmarkNode* old_parent, |
- int old_index, |
- BookmarkNode* new_parent, |
- int new_index) {} |
- virtual void BookmarkNodeAdded(BookmarkModel* model, |
- BookmarkNode* parent, |
- int index) {} |
- virtual void BookmarkNodeRemoved(BookmarkModel* model, |
- BookmarkNode* parent, |
- int index) {} |
- virtual void BookmarkNodeChanged(BookmarkModel* model, |
- BookmarkNode* node) {} |
- virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model, |
- BookmarkNode* node) {} |
- |
- // NotificationObserver method. Called when TemplateURLModel has been loaded. |
- void Observe(NotificationType type, |
- const NotificationSource& source, |
- const NotificationDetails& details); |
- |
- // ShowWarningDialog() asks user to close the application that is owning the |
- // lock. They can retry or skip the importing process. |
- void ShowWarningDialog(); |
- |
- // OnLockViewEnd() is called when user end the dialog by clicking a push |
- // button. |is_continue| is true when user clicked the "Continue" button. |
- void OnLockViewEnd(bool is_continue); |
- |
- // Starts the process of importing the settings and data depending |
- // on what the user selected. |
- void StartImportSettings(const ProfileInfo& profile_info, |
- uint16 items, |
- ProfileWriter* writer, |
- bool first_run); |
- |
- // Cancel |
- void Cancel(); |
- |
- // An interface which an object can implement to be notified of events during |
- // the import process. |
- class Observer { |
- public: |
- virtual ~Observer() {} |
- // Invoked when data for the specified item is about to be collected. |
- virtual void ImportItemStarted(ImportItem item) = 0; |
- |
- // Invoked when data for the specified item has been collected from the |
- // source profile and is now ready for further processing. |
- virtual void ImportItemEnded(ImportItem item) = 0; |
- |
- // Invoked when the import begins. |
- virtual void ImportStarted() = 0; |
- |
- // Invoked when the source profile has been imported. |
- virtual void ImportEnded() = 0; |
- }; |
- void SetObserver(Observer* observer); |
- |
- // A series of functions invoked at the start, during and end of the end |
- // of the import process. The middle functions are notifications that the |
- // harvesting of a particular source of data (specified by |item|) is under |
- // way. |
- void ImportStarted(); |
- void ImportItemStarted(ImportItem item); |
- void ImportItemEnded(ImportItem item); |
- void ImportEnded(); |
- |
- Importer* CreateImporterByType(ProfileType type); |
- |
- // Returns the number of different browser profiles you can import from. |
- int GetAvailableProfileCount(); |
- |
- // Returns the name of the profile at the 'index' slot. The profiles are |
- // ordered such that the profile at index 0 is the likely default browser. |
- std::wstring GetSourceProfileNameAt(int index) const; |
- |
- // Returns the ProfileInfo at the specified index. The ProfileInfo should be |
- // passed to StartImportSettings(). |
- const ProfileInfo& GetSourceProfileInfoAt(int index) const; |
- |
- private: |
- // If we're not waiting on any model to finish loading, invokes the task_. |
- void InvokeTaskIfDone(); |
- |
- // Detects the installed browsers and their associated profiles, then |
- // stores their information in a list. It returns the list of description |
- // of all profiles. |
- void DetectSourceProfiles(); |
- |
- // Helper methods for detecting available profiles. |
- void DetectIEProfiles(); |
- void DetectFirefoxProfiles(); |
- |
- // The list of profiles with the default one first. |
- std::vector<ProfileInfo*> source_profiles_; |
- |
- Observer* observer_; |
- scoped_refptr<ProfileWriter> writer_; |
- |
- // The task is the process of importing settings from other browsers. |
- Task* task_; |
- |
- // The importer used in the task; |
- Importer* importer_; |
- |
- // The message loop for reading the source profiles. |
- MessageLoop* file_loop_; |
- |
- // True if we're waiting for the model to finish loading. |
- bool waiting_for_bookmarkbar_model_; |
- bool waiting_for_template_url_model_; |
- |
- // True if source profile is readable. |
- bool is_source_readable_; |
- |
- // Firefox profile lock. |
- scoped_ptr<FirefoxProfileLock> firefox_lock_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(ImporterHost); |
-}; |
- |
-// The base class of all importers. |
-class Importer : public base::RefCounted<Importer> { |
- public: |
- virtual ~Importer() { } |
- |
- // All importers should implement this method by adding their |
- // import logic. And it will be run in file thread by ImporterHost. |
- // |
- // Since we do async import, the importer should invoke |
- // ImporterHost::Finished() to notify its host that import |
- // stuff have been finished. |
- virtual void StartImport(ProfileInfo profile_info, |
- uint16 items, |
- ProfileWriter* writer, |
- ImporterHost* host) = 0; |
- |
- // Cancels the import process. |
- void Cancel() { cancelled_ = true; } |
- |
- void set_first_run(bool first_run) { first_run_ = first_run; } |
- |
- protected: |
- Importer() |
- : main_loop_(MessageLoop::current()), |
- importer_host_(NULL), |
- cancelled_(false) {} |
- |
- // Notifies the coordinator that the collection of data for the specified |
- // item has begun. |
- void NotifyItemStarted(ImportItem item) { |
- main_loop_->PostTask(FROM_HERE, NewRunnableMethod(importer_host_, |
- &ImporterHost::ImportItemStarted, item)); |
- } |
- |
- // Notifies the coordinator that the collection of data for the specified |
- // item has completed. |
- void NotifyItemEnded(ImportItem item) { |
- main_loop_->PostTask(FROM_HERE, NewRunnableMethod(importer_host_, |
- &ImporterHost::ImportItemEnded, item)); |
- } |
- |
- // Notifies the coordinator that the import operation has begun. |
- void NotifyStarted() { |
- main_loop_->PostTask(FROM_HERE, NewRunnableMethod(importer_host_, |
- &ImporterHost::ImportStarted)); |
- } |
- |
- // Notifies the coordinator that the entire import operation has completed. |
- void NotifyEnded() { |
- main_loop_->PostTask(FROM_HERE, |
- NewRunnableMethod(importer_host_, &ImporterHost::ImportEnded)); |
- } |
- |
- // Given raw image data, decodes the icon, re-sampling to the correct size as |
- // necessary, and re-encodes as PNG data in the given output vector. Returns |
- // true on success. |
- static bool ReencodeFavicon(const unsigned char* src_data, size_t src_len, |
- std::vector<unsigned char>* png_data); |
- |
- bool cancelled() const { return cancelled_; } |
- |
- bool first_run() const { return first_run_; } |
- |
- // The importer should know the main thread so that ProfileWriter |
- // will be invoked in thread instead. |
- MessageLoop* main_loop_; |
- |
- // The coordinator host for this importer. |
- ImporterHost* importer_host_; |
- |
- private: |
- // True if the caller cancels the import process. |
- bool cancelled_; |
- |
- // True if the importer is created in the first run UI. |
- bool first_run_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(Importer); |
-}; |
- |
-// An interface an object that calls StartImportingWithUI can call to be |
-// notified about the state of the import operation. |
-class ImportObserver { |
- public: |
- virtual ~ImportObserver() {} |
- // The import operation was canceled by the user. |
- virtual void ImportCanceled() = 0; |
- |
- // The import operation was completed successfully. |
- virtual void ImportComplete() = 0; |
-}; |
- |
- |
-// Shows a UI for importing and begins importing the specified items from |
-// source_profile to target_profile. observer is notified when the process is |
-// complete, can be NULL. parent is the window to parent the UI to, can be NULL |
-// if there's nothing to parent to. first_run is true if it's invoked in the |
-// first run UI. |
-void StartImportingWithUI(HWND parent_window, |
- int16 items, |
- ImporterHost* coordinator, |
- const ProfileInfo& source_profile, |
- Profile* target_profile, |
- ImportObserver* observer, |
- bool first_run); |
- |
-#endif // CHROME_BROWSER_IMPORTER_H__ |
- |