• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_BROWSER_IMPORTER_PROFILE_IMPORT_PROCESS_HOST_H_
6 #define CHROME_BROWSER_IMPORTER_PROFILE_IMPORT_PROCESS_HOST_H_
7 #pragma once
8 
9 #include <string>
10 #include <vector>
11 
12 #include "base/basictypes.h"
13 #include "base/compiler_specific.h"
14 #include "base/memory/ref_counted.h"
15 #include "chrome/browser/importer/importer_data_types.h"
16 #include "chrome/browser/importer/profile_writer.h"
17 #include "content/browser/browser_child_process_host.h"
18 #include "content/browser/browser_thread.h"
19 
20 class ProfileImportProcessClient;
21 
22 namespace webkit_glue {
23 struct PasswordForm;
24 }
25 
26 // Browser-side host to a profile import process.  This class lives only on
27 // the IO thread.  It passes messages back to the |thread_id_| thread through
28 // a client object.
29 class ProfileImportProcessHost : public BrowserChildProcessHost {
30  public:
31   // |import_process_client| implements callbacks which are triggered by
32   // incoming IPC messages.  This client creates an interface between IPC
33   // messages received by the ProfileImportProcessHost and the internal
34   // importer_bridge.
35   // |thread_id| gives the thread where the client lives. The
36   // ProfileImportProcessHost spawns tasks on this thread for the client.
37   ProfileImportProcessHost(ProfileImportProcessClient* import_process_client,
38                            BrowserThread::ID thread_id);
39   virtual ~ProfileImportProcessHost();
40 
41   // |source_profile|, |items|, and |import_to_bookmark_bar| are all needed by
42   // the external importer process.
43   bool StartProfileImportProcess(const importer::SourceProfile& source_profile,
44                                  uint16 items,
45                                  bool import_to_bookmark_bar);
46 
47   // Cancel the external import process.
48   bool CancelProfileImportProcess();
49 
50   // Report that an item has been successfully imported.  We need to make
51   // sure that all import messages have come across the wire before the
52   // external import process shuts itself down.
53   bool ReportImportItemFinished(importer::ImportItem item);
54 
55  protected:
56   // This method is virtual to be overridden by tests.
57   virtual FilePath GetProfileImportProcessCmd();
58 
59  private:
60   // Launch the new process.
61   bool StartProcess();
62 
63   // Called by the external importer process to send messages back to the
64   // ImportProcessClient.
65   virtual bool OnMessageReceived(const IPC::Message& message);
66 
67   // BrowserChildProcessHost:
68   virtual void OnProcessCrashed(int exit_code) OVERRIDE;
69   virtual bool CanShutdown() OVERRIDE;
70 
71   // Receives messages to be passed back to the importer host.
72   scoped_refptr<ProfileImportProcessClient> import_process_client_;
73 
74   // The thread where the import_process_client_ lives.
75   BrowserThread::ID thread_id_;
76 
77   DISALLOW_COPY_AND_ASSIGN(ProfileImportProcessHost);
78 };
79 
80 #endif  // CHROME_BROWSER_IMPORTER_PROFILE_IMPORT_PROCESS_HOST_H_
81