blob: 9b94ee141e214eaeff0f002ac9ce9394c536a2d4 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <iosfwd>
#include <map>
#include <memory>
#include <string>
#include <vector>
#include "base/optional.h"
#include "base/strings/string16.h"
#include "third_party/blink/public/common/manifest/manifest.h"
#include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/geometry/size.h"
#include "url/gurl.h"
using SquareSizePx = int;
struct WebApplicationIconInfo {
WebApplicationIconInfo(const WebApplicationIconInfo&);
WebApplicationIconInfo& operator=(const WebApplicationIconInfo&);
WebApplicationIconInfo& operator=(WebApplicationIconInfo&&);
GURL url;
SquareSizePx square_size_px;
// Structure used when installing a web page as an app.
struct WebApplicationInfo {
enum MobileCapable {
WebApplicationInfo(const WebApplicationInfo& other);
// Title of the application.
base::string16 title;
// Description of the application.
base::string16 description;
// The launch URL for the app.
GURL app_url;
// Scope for the app. Dictates what URLs will be opened in the app.
GURL scope;
// List of icon URLs with associated square size.
std::vector<WebApplicationIconInfo> icon_infos;
// Icon bitmaps keyed by their square size.
std::map<SquareSizePx, SkBitmap> icon_bitmaps;
// Whether the page is marked as mobile-capable, including apple specific meta
// tag.
MobileCapable mobile_capable;
// The color to use if an icon needs to be generated for the web app.
SkColor generated_icon_color;
// The color to use for the web app frame.
base::Optional<SkColor> theme_color;
// App preference regarding whether the app should be opened in a tab,
// in a window (with or without minimal-ui buttons), or full screen.
blink::mojom::DisplayMode display_mode;
// User preference as to whether the app should be opened in a window.
// If false, the app will be opened in a tab.
// If true, the app will be opened in a window, with minimal-ui buttons
// if display_mode is kBrowser or kMinimalUi.
bool open_as_window;
// The extensions and mime types the app can handle.
std::vector<blink::Manifest::FileHandler> file_handlers;
std::ostream& operator<<(std::ostream& out,
const WebApplicationIconInfo& icon_info);
bool operator==(const WebApplicationIconInfo& icon_info1,
const WebApplicationIconInfo& icon_info2);