File: external_process_importer_client.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (151 lines) | stat: -rw-r--r-- 6,235 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// Copyright 2012 The Chromium Authors
// 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_

#include <stddef.h>
#include <stdint.h>

#include <string>
#include <vector>

#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "build/build_config.h"
#include "chrome/common/importer/importer_autofill_form_data_entry.h"
#include "chrome/common/importer/profile_import.mojom.h"
#include "components/favicon_base/favicon_usage_data.h"
#include "components/history/core/browser/history_types.h"
#include "components/user_data_importer/common/importer_data_types.h"
#include "components/user_data_importer/common/importer_url_row.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"

class ExternalProcessImporterHost;
class InProcessImporterBridge;

namespace user_data_importer {
struct ImportedBookmarkEntry;
}  // namespace user_data_importer

// This class is the client for the out of process profile importing.  It
// collects notifications from this process host and feeds data back to the
// importer host, who actually does the writing.
class ExternalProcessImporterClient
    : public chrome::mojom::ProfileImportObserver,
      public base::RefCounted<ExternalProcessImporterClient> {
 public:
  ExternalProcessImporterClient(
      base::WeakPtr<ExternalProcessImporterHost> importer_host,
      const user_data_importer::SourceProfile& source_profile,
      uint16_t items,
      InProcessImporterBridge* bridge);

  ExternalProcessImporterClient(const ExternalProcessImporterClient&) = delete;
  ExternalProcessImporterClient& operator=(
      const ExternalProcessImporterClient&) = delete;

  // Launches the task to start the external process.
  void Start();

  // Called by the ExternalProcessImporterHost on import cancel.
  void Cancel();

  // chrome::mojom::ProfileImportObserver:
  void OnImportStart() override;
  void OnImportFinished(bool succeeded, const std::string& error_msg) override;
  void OnImportItemStart(user_data_importer::ImportItem item) override;
  void OnImportItemFinished(user_data_importer::ImportItem item) override;
  void OnHistoryImportStart(uint32_t total_history_rows_count) override;
  void OnHistoryImportGroup(
      const std::vector<user_data_importer::ImporterURLRow>& history_rows_group,
      int visit_source) override;
  void OnHomePageImportReady(const GURL& home_page) override;
  void OnBookmarksImportStart(const std::u16string& first_folder_name,
                              uint32_t total_bookmarks_count) override;
  void OnBookmarksImportGroup(
      const std::vector<user_data_importer::ImportedBookmarkEntry>&
          bookmarks_group) override;
  void OnFaviconsImportStart(uint32_t total_favicons_count) override;
  void OnFaviconsImportGroup(
      const favicon_base::FaviconUsageDataList& favicons_group) override;
  void OnPasswordFormImportReady(
      const user_data_importer::ImportedPasswordForm& form) override;
  void OnKeywordsImportReady(
      const std::vector<user_data_importer::SearchEngineInfo>& search_engines,
      bool unique_on_host_and_path) override;
  void OnAutofillFormDataImportStart(
      uint32_t total_autofill_form_data_entry_count) override;
  void OnAutofillFormDataImportGroup(
      const std::vector<ImporterAutofillFormDataEntry>&
          autofill_form_data_entry_group) override;

 protected:
  ~ExternalProcessImporterClient() override;

 private:
  friend class base::RefCounted<ExternalProcessImporterClient>;

  // Invoked if the ProfileImport service process crashes.
  void OnProcessCrashed();

  // Notifies the importerhost that import has finished, and calls Release().
  void Cleanup();

  // The Mojo connections need to be torn down on the same thread that created
  // them, but the destructor is not guaranteed to be run on that thread so we
  // tear down the connections explicitly.
  void CloseMojoHandles();

  // 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<user_data_importer::ImporterURLRow> history_rows_;
  std::vector<user_data_importer::ImportedBookmarkEntry> bookmarks_;
  favicon_base::FaviconUsageDataList favicons_;
  std::vector<ImporterAutofillFormDataEntry> autofill_form_data_;

  // Usually some variation on IDS_BOOKMARK_GROUP_...; the name of the folder
  // under which imported bookmarks will be placed.
  std::u16string bookmarks_first_folder_name_;

  // 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 favicons to import.
  size_t total_favicons_count_;

  // Total number of autofill form data entries to import.
  size_t total_autofill_form_data_entry_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. This is a weak ptr so that any messages received after
  // the host has deleted itself are ignored (e.g., it's possible to receive
  // OnProcessCrashed() after NotifyImportEnded()).
  base::WeakPtr<ExternalProcessImporterHost> process_importer_host_;

  // Data to be passed from the importer host to the external importer.
  user_data_importer::SourceProfile source_profile_;
  uint16_t items_;

  // Takes import data coming over IPC and delivers it to be written by the
  // ProfileWriter.
  scoped_refptr<InProcessImporterBridge> bridge_;

  // True if import process has been cancelled.
  bool cancelled_;

  // Used to start and stop the actual importer running in a different process.
  mojo::Remote<chrome::mojom::ProfileImport> profile_import_;

  // Used to receive progress updates from the importer.
  mojo::Receiver<chrome::mojom::ProfileImportObserver> receiver_{this};
};

#endif  // CHROME_BROWSER_IMPORTER_EXTERNAL_PROCESS_IMPORTER_CLIENT_H_