chromium/ui/file_manager/integration_tests/file_manager/share.ts

// 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.

import {ENTRIES, RootPath, sendTestMessage} from '../test_util.js';

import {remoteCall} from './background.js';


/*
 * Verify that sharing options for an encrypted files are limited to nearby
 * sharing (which only uses URLs and doesn't need to access file contents) and
 * drive-based sharing (which is managing permissions in Google Drive and also
 * doesn't need to access the contents). Other options, such as “Copy”, should
 * be removed.
 */
export async function checkEncryptedSharesheetOptions() {
  const appId = await remoteCall.setupAndWaitUntilReady(
      RootPath.DRIVE, [], [ENTRIES.testCSEFile]);

  await remoteCall.showContextMenuFor(appId, ENTRIES.testCSEFile.nameText);

  const shareMenuItem =
      '#file-context-menu:not([hidden]) [command="#invoke-sharesheet"]:not([hidden]):not([disabled])';
  chrome.test.assertTrue(
      !!await remoteCall.waitAndClickElement(appId, shareMenuItem),
      'failed to click context menu item');

  const shareInfo =
      await sendTestMessage({name: 'getSharesheetInfo'}) as string;
  const shareTargetsList = JSON.parse(shareInfo) as string[];

  for (const target of shareTargetsList) {
    chrome.test.assertTrue(
        target === 'Share with others' || target === 'Quick Share' ||
            target === 'Nearby Share',
        'unexpected share target: ' + target);
  }
}