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_
|