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
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_WEBAPPS_BROWSER_INSTALLABLE_INSTALLABLE_PAGE_DATA_H_
#define COMPONENTS_WEBAPPS_BROWSER_INSTALLABLE_INSTALLABLE_PAGE_DATA_H_
#include "components/webapps/browser/installable/installable_data.h"
#include "components/webapps/common/web_page_metadata.mojom.h"
#include "third_party/blink/public/mojom/manifest/manifest.mojom.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "url/gurl.h"
namespace webapps {
using IconPurpose = blink::mojom::ManifestImageResource_Purpose;
class InstallablePageData {
public:
InstallablePageData();
~InstallablePageData();
InstallablePageData(const InstallablePageData&) = delete;
InstallablePageData& operator=(const InstallablePageData&) = delete;
InstallablePageData(InstallablePageData&& other) noexcept;
InstallablePageData& operator=(InstallablePageData&& other);
void Reset();
void OnManifestFetched(
blink::mojom::ManifestPtr manifest,
GURL manifest_url,
InstallableStatusCode error = InstallableStatusCode::NO_ERROR_DETECTED);
void OnPageMetadataFetched(mojom::WebPageMetadataPtr web_page_metadata);
void OnPrimaryIconFetched(const GURL& icon_url,
const IconPurpose purpose,
const SkBitmap& bitmap);
void OnPrimaryIconFetchedError(InstallableStatusCode code);
void OnScreenshotsDownloaded(std::vector<Screenshot> screenshots);
const blink::mojom::Manifest& GetManifest() const;
const mojom::WebPageMetadata& WebPageMetadata() const;
const GURL& manifest_url() const { return manifest_->url; }
InstallableStatusCode manifest_error() const { return manifest_->error; }
bool manifest_fetched() const { return manifest_->fetched; }
bool web_page_metadata_fetched() const { return web_page_metadata_->fetched; }
const SkBitmap* primary_icon() const { return primary_icon_->icon.get(); }
IconPurpose primary_icon_purpose() const { return primary_icon_->purpose; }
const GURL& primary_icon_url() const { return primary_icon_->url; }
InstallableStatusCode icon_error() const { return primary_icon_->error; }
bool primary_icon_fetched() const { return primary_icon_->fetched; }
const std::vector<Screenshot>& screenshots() const { return screenshots_; }
bool is_screenshots_fetch_complete() const {
return is_screenshots_fetch_complete_;
}
private:
friend class InstallableEvaluatorUnitTest;
struct ManifestProperty {
ManifestProperty();
~ManifestProperty();
InstallableStatusCode error = InstallableStatusCode::NO_ERROR_DETECTED;
// This can be empty if the page doesn't have a manifest url.
GURL url;
blink::mojom::ManifestPtr manifest = blink::mojom::Manifest::New();
bool fetched = false;
};
struct WebPageMetadataProperty {
WebPageMetadataProperty();
~WebPageMetadataProperty();
mojom::WebPageMetadataPtr metadata = mojom::WebPageMetadata::New();
bool fetched = false;
};
struct IconProperty {
IconProperty();
IconProperty(const IconProperty&) = delete;
IconProperty& operator=(const IconProperty&) = delete;
IconProperty(IconProperty&& other) noexcept;
IconProperty& operator=(IconProperty&& other);
~IconProperty();
InstallableStatusCode error = InstallableStatusCode::NO_ERROR_DETECTED;
IconPurpose purpose = IconPurpose::ANY;
GURL url;
std::unique_ptr<SkBitmap> icon;
bool fetched = false;
};
std::unique_ptr<ManifestProperty> manifest_;
std::unique_ptr<WebPageMetadataProperty> web_page_metadata_;
std::unique_ptr<IconProperty> primary_icon_;
std::vector<Screenshot> screenshots_;
bool is_screenshots_fetch_complete_ = false;
};
} // namespace webapps
#endif // COMPONENTS_WEBAPPS_BROWSER_INSTALLABLE_INSTALLABLE_PAGE_DATA_H_
|