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
|
// 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.
#include "chrome/browser/ash/sharesheet/drive_share_action.h"
#include <memory>
#include <vector>
#include "ash/public/cpp/new_window_delegate.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/sharesheet/sharesheet_controller.h"
#include "chrome/browser/sharesheet/sharesheet_types.h"
#include "chromeos/components/sharesheet/constants.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/chromeos/strings/grit/ui_chromeos_strings.h"
#include "url/gurl.h"
namespace ash {
namespace sharesheet {
DriveShareAction::DriveShareAction() = default;
DriveShareAction::~DriveShareAction() = default;
::sharesheet::ShareActionType DriveShareAction::GetActionType() const {
return ::sharesheet::ShareActionType::kDriveShare;
}
const std::u16string DriveShareAction::GetActionName() {
return l10n_util::GetStringUTF16(IDS_FILE_BROWSER_SHARE_BUTTON_LABEL);
}
const gfx::VectorIcon& DriveShareAction::GetActionIcon() {
return kSharesheetShareWithOthersIcon;
}
void DriveShareAction::LaunchAction(
::sharesheet::SharesheetController* controller,
views::View* root_view,
apps::IntentPtr intent) {
controller_ = controller;
DCHECK(intent->drive_share_url.has_value());
if (!ash::NewWindowDelegate::GetPrimary()) {
return;
}
ash::NewWindowDelegate::GetPrimary()->OpenUrl(
intent->drive_share_url.value(),
ash::NewWindowDelegate::OpenUrlFrom::kUserInteraction,
NewWindowDelegate::Disposition::kNewForegroundTab);
// Opening URL may close the bubble.
if (controller_) {
controller_->CloseBubble(::sharesheet::SharesheetResult::kSuccess);
}
}
void DriveShareAction::OnClosing(
::sharesheet::SharesheetController* controller) {
controller_ = nullptr;
}
bool DriveShareAction::ShouldShowAction(const apps::IntentPtr& intent,
bool contains_hosted_document) {
return intent->drive_share_url.has_value() &&
!intent->drive_share_url->is_empty();
}
} // namespace sharesheet
} // namespace ash
|