File: image_loader_private_api.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 (133 lines) | stat: -rw-r--r-- 4,794 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
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file provides API functions to fetch external thumbnails for filesystem
// providers that support it.

#ifndef CHROME_BROWSER_ASH_EXTENSIONS_FILE_MANAGER_IMAGE_LOADER_PRIVATE_API_H_
#define CHROME_BROWSER_ASH_EXTENSIONS_FILE_MANAGER_IMAGE_LOADER_PRIVATE_API_H_

#include <memory>
#include <string>
#include <vector>

#include "chrome/browser/ash/arc/fileapi/arc_documents_provider_root.h"
#include "chrome/browser/ash/extensions/file_manager/logged_extension_function.h"
#include "chrome/common/extensions/api/image_loader_private.h"
#include "chrome/services/pdf/public/mojom/pdf_thumbnailer.mojom.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "storage/browser/file_system/file_system_url.h"

class SkBitmap;

namespace extensions {

// Base class for thumbnail functions
class ImageLoaderPrivateGetThumbnailFunction : public LoggedExtensionFunction {
 public:
  ImageLoaderPrivateGetThumbnailFunction();

 protected:
  ~ImageLoaderPrivateGetThumbnailFunction() override = default;

  // Responds with a base64 encoded PNG thumbnail data.
  void SendEncodedThumbnail(std::string thumbnail_data_url);
};

class ImageLoaderPrivateGetDriveThumbnailFunction
    : public ImageLoaderPrivateGetThumbnailFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("imageLoaderPrivate.getDriveThumbnail",
                             IMAGELOADERPRIVATE_GETDRIVETHUMBNAIL)

  ImageLoaderPrivateGetDriveThumbnailFunction();

 protected:
  ~ImageLoaderPrivateGetDriveThumbnailFunction() override;

  // ExtensionFunction overrides.
  ResponseAction Run() override;

 private:
  // A callback invoked when thumbnail data has been generated.
  void GotThumbnail(const std::optional<std::vector<uint8_t>>& data);
};

class ImageLoaderPrivateGetPdfThumbnailFunction
    : public ImageLoaderPrivateGetThumbnailFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("imageLoaderPrivate.getPdfThumbnail",
                             IMAGELOADERPRIVATE_GETPDFTHUMBNAIL)

  ImageLoaderPrivateGetPdfThumbnailFunction();

 protected:
  ~ImageLoaderPrivateGetPdfThumbnailFunction() override;

  // ExtensionFunction overrides.
  ResponseAction Run() override;

 private:
  // For a given `content` starts fetching the first page PDF thumbnail by
  // calling PdfThumbnailer from PdfService. The first parameters, `size` is
  // supplied by the JavaScript caller.
  void FetchThumbnail(const gfx::Size& size, const std::string& content);

  // Callback invoked by the thumbnailing service when a PDF thumbnail has been
  // generated. The solitary parameter |bitmap| is supplied by the callback.
  // If |bitmap| is null, an error occurred. Otherwise, |bitmap| contains the
  // generated thumbnail.
  void GotThumbnail(const SkBitmap& bitmap);

  // Handles a mojo channel disconnect event.
  void ThumbnailDisconnected();

  // Holds the channel to Printing PDF thumbnailing service. Bound only
  // when needed.
  mojo::Remote<pdf::mojom::PdfThumbnailer> pdf_thumbnailer_;

  // The dots per inch (dpi) resolution at which the PDF is rendered to a
  // thumbnail. The value of 30 is selected so that a US Letter size page does
  // not overflow a kSize x kSize thumbnail.
  constexpr static int kDpi = 30;
};

class ImageLoaderPrivateGetArcDocumentsProviderThumbnailFunction
    : public ImageLoaderPrivateGetThumbnailFunction {
 public:
  DECLARE_EXTENSION_FUNCTION(
      "imageLoaderPrivate.getArcDocumentsProviderThumbnail",
      IMAGELOADERPRIVATE_GETARCDOCUMENTSPROVIDERTHUMBNAIL)

  ImageLoaderPrivateGetArcDocumentsProviderThumbnailFunction();

 protected:
  ~ImageLoaderPrivateGetArcDocumentsProviderThumbnailFunction() override;

  // ExtensionFunction overrides.
  ResponseAction Run() override;

 private:
  // A callback invoked when ExtraFileMetadata is returned from ARC.
  void OnGetExtraFileMetadata(
      const gfx::Size& size_hint,
      const storage::FileSystemURL& file_system_url,
      base::File::Error result,
      const arc::ArcDocumentsProviderRoot::ExtraFileMetadata& metadata);

  // A callback invoked when a FilesystemURL is resolved to content URLs.
  // |paths_to_share| is always expected to be empty because
  // ArcDocumentsProviderThumbnail related functions do not share path
  // to ARCVM via Seneschal.
  void GotContentUrls(const gfx::Size& size_hint,
                      const std::vector<GURL>& urls,
                      const std::vector<base::FilePath>& paths_to_share);

  // A callback invoked when ARC thumbnail file has been opened.
  void GotArcThumbnailFileHandle(mojo::ScopedHandle handle);
};

}  // namespace extensions

#endif  // CHROME_BROWSER_ASH_EXTENSIONS_FILE_MANAGER_IMAGE_LOADER_PRIVATE_API_H_