Commit 6ab0b809 authored by Eric Willigers's avatar Eric Willigers Committed by Commit Bot

Web Share: Use CreateShareIntentFromFiles

We now use CreateShareIntentFromFiles to create the ChromeOS intent.




Bug: 1110119
Change-Id: Ic748392818e775f7466ea7c0937f8195025b8052
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2437679
Commit-Queue: Eric Willigers <ericwilligers@chromium.org>
Reviewed-by: default avatarMaggie Cai <mxcai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812548}
parent bf7105bd
......@@ -12,6 +12,7 @@
#include "base/files/file_path.h"
#include "base/strings/string_piece.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/apps/app_service/intent_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sharesheet/sharesheet_service.h"
#include "chrome/browser/sharesheet/sharesheet_service_factory.h"
......@@ -127,20 +128,17 @@ void SharesheetClient::OnPrepareDirectory(blink::mojom::ShareError error) {
return;
}
std::vector<base::FilePath> filenames;
for (const auto& file : current_share_->files) {
base::FilePath filename =
GenerateFileName(current_share_->directory, file->name);
current_share_->content_types.push_back(file->blob->content_type);
current_share_->file_urls.push_back(net::FilePathToFileURL(filename));
filenames.push_back(std::move(filename));
current_share_->file_paths.push_back(
GenerateFileName(current_share_->directory, file->name));
}
BrowserContext* const browser_context = web_contents()->GetBrowserContext();
std::unique_ptr<StoreFilesTask> store_files_task =
std::make_unique<StoreFilesTask>(
BrowserContext::GetBlobStorageContext(browser_context),
std::move(filenames), std::move(current_share_->files),
current_share_->file_paths, std::move(current_share_->files),
base::BindOnce(&SharesheetClient::OnStoreFiles,
weak_ptr_factory_.GetWeakPtr()));
......@@ -158,7 +156,7 @@ void SharesheetClient::OnStoreFiles(blink::mojom::ShareError error) {
}
GetSharesheetCallback().Run(
web_contents(), std::move(current_share_->file_urls),
web_contents(), std::move(current_share_->file_paths),
std::move(current_share_->content_types),
base::BindOnce(&SharesheetClient::OnShowSharesheet,
weak_ptr_factory_.GetWeakPtr()));
......@@ -171,7 +169,7 @@ void SharesheetClient::OnShowSharesheet(sharesheet::SharesheetResult result) {
// static
void SharesheetClient::ShowSharesheet(content::WebContents* web_contents,
std::vector<GURL> file_urls,
std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types,
CloseCallback close_callback) {
if (!base::FeatureList::IsEnabled(features::kSharesheet)) {
......@@ -188,7 +186,7 @@ void SharesheetClient::ShowSharesheet(content::WebContents* web_contents,
sharesheet_service->ShowBubble(
web_contents,
apps_util::CreateShareIntentFromFiles(std::move(file_urls),
apps_util::CreateShareIntentFromFiles(profile, std::move(file_paths),
std::move(content_types)),
std::move(close_callback));
}
......
......@@ -30,7 +30,7 @@ class SharesheetClient : public content::WebContentsObserver {
using CloseCallback = sharesheet::CloseCallback;
using SharesheetCallback =
base::RepeatingCallback<void(content::WebContents* web_contents,
std::vector<GURL> file_urls,
std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types,
CloseCallback close_callback)>;
......@@ -55,7 +55,7 @@ class SharesheetClient : public content::WebContentsObserver {
void OnShowSharesheet(sharesheet::SharesheetResult result);
static void ShowSharesheet(content::WebContents* web_contents,
std::vector<GURL> file_urls,
std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types,
CloseCallback close_callback);
......@@ -74,7 +74,7 @@ class SharesheetClient : public content::WebContentsObserver {
std::vector<blink::mojom::SharedFilePtr> files;
base::FilePath directory;
std::vector<GURL> file_urls;
std::vector<base::FilePath> file_paths;
std::vector<std::string> content_types;
blink::mojom::ShareService::ShareCallback callback;
......
......@@ -68,19 +68,16 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, ShareTwoFiles) {
ui_test_utils::NavigateToURL(browser(), GetAppUrl());
content::WebContents* const contents =
browser()->tab_strip_model()->GetActiveWebContents();
base::FilePath first_file_path;
base::FilePath second_file_path;
std::vector<base::FilePath> file_paths;
SharesheetClient::SetSharesheetCallbackForTesting(base::BindLambdaForTesting(
[contents, &first_file_path, &second_file_path](
content::WebContents* web_contents, std::vector<GURL> file_urls,
std::vector<std::string> content_types,
SharesheetClient::CloseCallback close_callback) {
EXPECT_EQ(contents, web_contents);
[contents, &file_paths](content::WebContents* in_contents,
std::vector<base::FilePath> in_file_paths,
std::vector<std::string> content_types,
SharesheetClient::CloseCallback close_callback) {
EXPECT_EQ(contents, in_contents);
EXPECT_EQ(file_urls.size(), 2U);
EXPECT_TRUE(net::FileURLToFilePath(file_urls[0], &first_file_path));
EXPECT_TRUE(net::FileURLToFilePath(file_urls[1], &second_file_path));
file_paths = std::move(in_file_paths);
EXPECT_EQ(content_types.size(), 2U);
EXPECT_EQ(content_types[0], "audio/mp3");
......@@ -90,8 +87,9 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, ShareTwoFiles) {
}));
EXPECT_EQ("share succeeded", content::EvalJs(contents, script));
CheckSize(first_file_path, /*expected_size=*/345);
CheckSize(second_file_path, /*expected_size=*/67890);
EXPECT_EQ(file_paths.size(), 2U);
CheckSize(file_paths[0], /*expected_size=*/345);
CheckSize(file_paths[1], /*expected_size=*/67890);
}
IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) {
......@@ -103,18 +101,18 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) {
browser()->tab_strip_model()->GetActiveWebContents();
for (int count = 0; count < kRepeats; ++count) {
base::FilePath file_path;
std::vector<base::FilePath> file_paths;
SharesheetClient::SetSharesheetCallbackForTesting(
base::BindLambdaForTesting(
[contents, &file_path](
content::WebContents* web_contents, std::vector<GURL> file_urls,
[contents, &file_paths](
content::WebContents* in_contents,
std::vector<base::FilePath> in_file_paths,
std::vector<std::string> content_types,
SharesheetClient::CloseCallback close_callback) {
EXPECT_EQ(contents, web_contents);
EXPECT_EQ(contents, in_contents);
EXPECT_EQ(file_urls.size(), 1U);
EXPECT_TRUE(net::FileURLToFilePath(file_urls[0], &file_path));
file_paths = std::move(in_file_paths);
EXPECT_EQ(content_types.size(), 1U);
EXPECT_EQ(content_types[0], "image/webp");
......@@ -124,7 +122,8 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) {
}));
EXPECT_EQ("share succeeded", content::EvalJs(contents, script));
CheckSize(file_path, /*expected_size=*/12);
EXPECT_EQ(file_paths.size(), 1U);
CheckSize(file_paths[0], /*expected_size=*/12);
}
}
......@@ -136,7 +135,8 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, CancelledShare) {
ui_test_utils::NavigateToURL(browser(), GetAppUrl());
SharesheetClient::SetSharesheetCallbackForTesting(base::BindLambdaForTesting(
[](content::WebContents* web_contents, std::vector<GURL> file_urls,
[](content::WebContents* in_contents,
std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types,
SharesheetClient::CloseCallback close_callback) {
std::move(close_callback).Run(sharesheet::SharesheetResult::kCancel);
......
......@@ -116,7 +116,7 @@ class ShareServiceUnitTest : public ChromeRenderViewHostTestHarness {
#if defined(OS_CHROMEOS)
static void AcceptShareRequest(content::WebContents* web_contents,
std::vector<GURL> file_urls,
std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types,
sharesheet::CloseCallback close_callback) {
std::move(close_callback).Run(sharesheet::SharesheetResult::kSuccess);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment