File: partner_bookmarks_reader.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 (140 lines) | stat: -rw-r--r-- 5,439 bytes parent folder | download | duplicates (6)
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
// Copyright 2015 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_PARTNERBOOKMARKS_PARTNER_BOOKMARKS_READER_H_
#define CHROME_BROWSER_PARTNERBOOKMARKS_PARTNER_BOOKMARKS_READER_H_

#include <stdint.h>

#include <memory>

#include "base/android/jni_weak_ref.h"
#include "base/containers/span.h"
#include "base/memory/raw_ptr.h"
#include "components/bookmarks/browser/bookmark_node.h"
#include "components/favicon_base/favicon_types.h"

namespace favicon {
class LargeIconService;
}

class PartnerBookmarksShim;
class Profile;

// Generates a partner bookmark hierarchy and handles submitting the results to
// the global PartnerBookmarksShim.
class PartnerBookmarksReader {
 public:
  PartnerBookmarksReader(PartnerBookmarksShim* partner_bookmarks_shim,
                         Profile* profile);

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

  ~PartnerBookmarksReader();

  // JNI methods
  void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
  void Reset(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
  jlong AddPartnerBookmark(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& obj,
      const base::android::JavaParamRef<jstring>& jurl,
      const base::android::JavaParamRef<jstring>& jtitle,
      jboolean is_folder,
      jlong parent_id,
      const base::android::JavaParamRef<jbyteArray>& favicon,
      const base::android::JavaParamRef<jbyteArray>& touchicon,
      jboolean fetch_uncached_favicons_from_server,
      jint desired_favicon_size_px,
      // Callback<FaviconFetchResult>
      const base::android::JavaParamRef<jobject>& j_callback);
  void PartnerBookmarksCreationComplete(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& obj);

  static std::unique_ptr<bookmarks::BookmarkNode>
  CreatePartnerBookmarksRootForTesting();

 private:
  // These values are persisted to logs. Entries should not be renumbered and
  // numeric values should never be reused.
  // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.partnerbookmarks
  enum class FaviconFetchResult {
    // Successfully fetched a favicon from cache or server.
    // Deprecated, SUCCESS_FROM_CACHE and SUCCESS_FROM_SERVER should be used.
    DEPRECATED_SUCCESS = 0,
    // Received a server error fetching the favicon.
    FAILURE_SERVER_ERROR,
    // The icon service was unavailable.
    FAILURE_ICON_SERVICE_UNAVAILABLE,
    // There was nothing in the cache, but we opted out of retrieving from
    // server.
    FAILURE_NOT_IN_CACHE,
    // Request sent out and a connection error occurred (no valid HTTP response
    // received).
    FAILURE_CONNECTION_ERROR,
    // Success fetching the favicon from the cache without reaching out to the
    // server.
    SUCCESS_FROM_CACHE,
    // Success fetching the favicon from server.
    SUCCESS_FROM_SERVER,
    // Failed to write the favicon to cache, likely from attempting to add a
    // duplicate.
    FAILURE_WRITING_FAVICON_CACHE,
    // Boundary value for UMA.
    UMA_BOUNDARY,
  };

  using FaviconFetchedCallback = base::OnceCallback<void(FaviconFetchResult)>;

  favicon::LargeIconService* GetLargeIconService();
  void GetFavicon(const GURL& page_url,
                  Profile* profile,
                  bool fallback_to_server,
                  int desired_favicon_size_px,
                  FaviconFetchedCallback callback);
  void GetFaviconImpl(const GURL& page_url,
                      Profile* profile,
                      bool fallback_to_server,
                      int desired_favicon_size_px,
                      FaviconFetchedCallback callback);
  void GetFaviconFromCacheOrServer(const GURL& page_url,
                                   bool fallback_to_server,
                                   bool from_server,
                                   int desired_favicon_size_px,
                                   FaviconFetchedCallback callback);
  void OnGetFaviconFromCacheFinished(
      const GURL& page_url,
      FaviconFetchedCallback callback,
      bool fallback_to_server,
      bool from_server,
      int desired_favicon_size_px,
      const favicon_base::LargeIconResult& result);
  void OnGetFaviconFromServerFinished(
      const GURL& page_url,
      int desired_favicon_size_px,
      FaviconFetchedCallback callback,
      favicon_base::GoogleFaviconServerRequestStatus status);
  void OnFaviconFetched(const base::android::JavaRef<jobject>& j_callback,
                        FaviconFetchResult result);
  // Putting in class in order to set the friend class access for
  // base::ScopedAllowBaseSyncPrimitives.
  static void PrepareAndSetFavicon(base::span<uint8_t> icon,
                                   bookmarks::BookmarkNode* node,
                                   Profile* profile,
                                   favicon_base::IconType icon_type);

  raw_ptr<PartnerBookmarksShim> partner_bookmarks_shim_;
  raw_ptr<Profile> profile_;

  raw_ptr<favicon::LargeIconService> large_icon_service_;
  base::CancelableTaskTracker favicon_task_tracker_;

  // JNI
  std::unique_ptr<bookmarks::BookmarkNode> wip_partner_bookmarks_root_;
  int64_t wip_next_available_id_;
};

#endif  // CHROME_BROWSER_PARTNERBOOKMARKS_PARTNER_BOOKMARKS_READER_H_