File: web_app_launch_queue_delegate_impl.cc

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 (68 lines) | stat: -rw-r--r-- 2,644 bytes parent folder | download | duplicates (5)
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
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/web_applications/web_app_launch_queue_delegate_impl.h"

#include "base/files/file_path.h"
#include "build/build_config.h"
#include "chrome/browser/web_applications/web_app_registrar.h"
#include "components/webapps/browser/launch_queue/launch_params.h"
#include "content/public/browser/file_system_access_permission_context.h"
#include "content/public/browser/web_contents.h"
#include "extensions/common/constants.h"
#include "storage/browser/file_system/external_mount_points.h"

namespace web_app {

namespace {

// TODO(crbug.com/40169582): Consider adding an {extension, pwa} enum to
// `launch_params` instead of checking the scheme specifically for extensions?
bool IsExtensionURL(const GURL& gurl) {
  return gurl.SchemeIs(extensions::kExtensionScheme);
}

}  // namespace

LaunchQueueDelegateImpl::LaunchQueueDelegateImpl(
    const WebAppRegistrar& registrar)
    : registrar_(registrar) {}

bool LaunchQueueDelegateImpl::IsValidLaunchParams(
    const webapps::LaunchParams& launch_params) const {
  return launch_params.dir.empty() ||
         registrar_->IsSystemApp(launch_params.app_id);
}

bool LaunchQueueDelegateImpl::IsInScope(
    const webapps::LaunchParams& launch_params,
    const GURL& current_url) const {
  // webapps::LaunchQueue is used by extensions with file handlers, extensions
  // don't have a concept of scope.
  // App scope is a web app concept that is not applicable for extensions.
  // Therefore this check will be skipped when launching an extension URL.
  return IsExtensionURL(current_url) ||
         registrar_->IsUrlInAppExtendedScope(current_url, launch_params.app_id);
}

// On Chrome OS paths that exist on an external mount point need to be treated
// differently to make sure the File System Access code accesses these paths via
// the correct file system backend. This method checks if this is the case, and
// updates `entry_path` to the path that should be used by the File System
// Access implementation.
content::PathInfo LaunchQueueDelegateImpl::GetPathInfo(
    const base::FilePath& entry_path) const {
#if BUILDFLAG(IS_CHROMEOS)
  base::FilePath virtual_path;
  auto* external_mount_points =
      storage::ExternalMountPoints::GetSystemInstance();
  if (external_mount_points->GetVirtualPath(entry_path, &virtual_path)) {
    return content::PathInfo(content::PathType::kExternal,
                             std::move(virtual_path));
  }
#endif
  return content::PathInfo(entry_path);
}

}  // namespace web_app