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 @@ ...@@ -12,6 +12,7 @@
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/strings/string_piece.h" #include "base/strings/string_piece.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "chrome/browser/apps/app_service/intent_util.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sharesheet/sharesheet_service.h" #include "chrome/browser/sharesheet/sharesheet_service.h"
#include "chrome/browser/sharesheet/sharesheet_service_factory.h" #include "chrome/browser/sharesheet/sharesheet_service_factory.h"
...@@ -127,20 +128,17 @@ void SharesheetClient::OnPrepareDirectory(blink::mojom::ShareError error) { ...@@ -127,20 +128,17 @@ void SharesheetClient::OnPrepareDirectory(blink::mojom::ShareError error) {
return; return;
} }
std::vector<base::FilePath> filenames;
for (const auto& file : current_share_->files) { 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_->content_types.push_back(file->blob->content_type);
current_share_->file_urls.push_back(net::FilePathToFileURL(filename)); current_share_->file_paths.push_back(
filenames.push_back(std::move(filename)); GenerateFileName(current_share_->directory, file->name));
} }
BrowserContext* const browser_context = web_contents()->GetBrowserContext(); BrowserContext* const browser_context = web_contents()->GetBrowserContext();
std::unique_ptr<StoreFilesTask> store_files_task = std::unique_ptr<StoreFilesTask> store_files_task =
std::make_unique<StoreFilesTask>( std::make_unique<StoreFilesTask>(
BrowserContext::GetBlobStorageContext(browser_context), 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, base::BindOnce(&SharesheetClient::OnStoreFiles,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
...@@ -158,7 +156,7 @@ void SharesheetClient::OnStoreFiles(blink::mojom::ShareError error) { ...@@ -158,7 +156,7 @@ void SharesheetClient::OnStoreFiles(blink::mojom::ShareError error) {
} }
GetSharesheetCallback().Run( GetSharesheetCallback().Run(
web_contents(), std::move(current_share_->file_urls), web_contents(), std::move(current_share_->file_paths),
std::move(current_share_->content_types), std::move(current_share_->content_types),
base::BindOnce(&SharesheetClient::OnShowSharesheet, base::BindOnce(&SharesheetClient::OnShowSharesheet,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
...@@ -171,7 +169,7 @@ void SharesheetClient::OnShowSharesheet(sharesheet::SharesheetResult result) { ...@@ -171,7 +169,7 @@ void SharesheetClient::OnShowSharesheet(sharesheet::SharesheetResult result) {
// static // static
void SharesheetClient::ShowSharesheet(content::WebContents* web_contents, void SharesheetClient::ShowSharesheet(content::WebContents* web_contents,
std::vector<GURL> file_urls, std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types, std::vector<std::string> content_types,
CloseCallback close_callback) { CloseCallback close_callback) {
if (!base::FeatureList::IsEnabled(features::kSharesheet)) { if (!base::FeatureList::IsEnabled(features::kSharesheet)) {
...@@ -188,7 +186,7 @@ void SharesheetClient::ShowSharesheet(content::WebContents* web_contents, ...@@ -188,7 +186,7 @@ void SharesheetClient::ShowSharesheet(content::WebContents* web_contents,
sharesheet_service->ShowBubble( sharesheet_service->ShowBubble(
web_contents, web_contents,
apps_util::CreateShareIntentFromFiles(std::move(file_urls), apps_util::CreateShareIntentFromFiles(profile, std::move(file_paths),
std::move(content_types)), std::move(content_types)),
std::move(close_callback)); std::move(close_callback));
} }
......
...@@ -30,7 +30,7 @@ class SharesheetClient : public content::WebContentsObserver { ...@@ -30,7 +30,7 @@ class SharesheetClient : public content::WebContentsObserver {
using CloseCallback = sharesheet::CloseCallback; using CloseCallback = sharesheet::CloseCallback;
using SharesheetCallback = using SharesheetCallback =
base::RepeatingCallback<void(content::WebContents* web_contents, base::RepeatingCallback<void(content::WebContents* web_contents,
std::vector<GURL> file_urls, std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types, std::vector<std::string> content_types,
CloseCallback close_callback)>; CloseCallback close_callback)>;
...@@ -55,7 +55,7 @@ class SharesheetClient : public content::WebContentsObserver { ...@@ -55,7 +55,7 @@ class SharesheetClient : public content::WebContentsObserver {
void OnShowSharesheet(sharesheet::SharesheetResult result); void OnShowSharesheet(sharesheet::SharesheetResult result);
static void ShowSharesheet(content::WebContents* web_contents, static void ShowSharesheet(content::WebContents* web_contents,
std::vector<GURL> file_urls, std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types, std::vector<std::string> content_types,
CloseCallback close_callback); CloseCallback close_callback);
...@@ -74,7 +74,7 @@ class SharesheetClient : public content::WebContentsObserver { ...@@ -74,7 +74,7 @@ class SharesheetClient : public content::WebContentsObserver {
std::vector<blink::mojom::SharedFilePtr> files; std::vector<blink::mojom::SharedFilePtr> files;
base::FilePath directory; base::FilePath directory;
std::vector<GURL> file_urls; std::vector<base::FilePath> file_paths;
std::vector<std::string> content_types; std::vector<std::string> content_types;
blink::mojom::ShareService::ShareCallback callback; blink::mojom::ShareService::ShareCallback callback;
......
...@@ -68,19 +68,16 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, ShareTwoFiles) { ...@@ -68,19 +68,16 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, ShareTwoFiles) {
ui_test_utils::NavigateToURL(browser(), GetAppUrl()); ui_test_utils::NavigateToURL(browser(), GetAppUrl());
content::WebContents* const contents = content::WebContents* const contents =
browser()->tab_strip_model()->GetActiveWebContents(); browser()->tab_strip_model()->GetActiveWebContents();
base::FilePath first_file_path; std::vector<base::FilePath> file_paths;
base::FilePath second_file_path;
SharesheetClient::SetSharesheetCallbackForTesting(base::BindLambdaForTesting( SharesheetClient::SetSharesheetCallbackForTesting(base::BindLambdaForTesting(
[contents, &first_file_path, &second_file_path]( [contents, &file_paths](content::WebContents* in_contents,
content::WebContents* web_contents, std::vector<GURL> file_urls, std::vector<base::FilePath> in_file_paths,
std::vector<std::string> content_types, std::vector<std::string> content_types,
SharesheetClient::CloseCallback close_callback) { SharesheetClient::CloseCallback close_callback) {
EXPECT_EQ(contents, web_contents); EXPECT_EQ(contents, in_contents);
EXPECT_EQ(file_urls.size(), 2U); file_paths = std::move(in_file_paths);
EXPECT_TRUE(net::FileURLToFilePath(file_urls[0], &first_file_path));
EXPECT_TRUE(net::FileURLToFilePath(file_urls[1], &second_file_path));
EXPECT_EQ(content_types.size(), 2U); EXPECT_EQ(content_types.size(), 2U);
EXPECT_EQ(content_types[0], "audio/mp3"); EXPECT_EQ(content_types[0], "audio/mp3");
...@@ -90,8 +87,9 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, ShareTwoFiles) { ...@@ -90,8 +87,9 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, ShareTwoFiles) {
})); }));
EXPECT_EQ("share succeeded", content::EvalJs(contents, script)); EXPECT_EQ("share succeeded", content::EvalJs(contents, script));
CheckSize(first_file_path, /*expected_size=*/345); EXPECT_EQ(file_paths.size(), 2U);
CheckSize(second_file_path, /*expected_size=*/67890); CheckSize(file_paths[0], /*expected_size=*/345);
CheckSize(file_paths[1], /*expected_size=*/67890);
} }
IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) { IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) {
...@@ -103,18 +101,18 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) { ...@@ -103,18 +101,18 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) {
browser()->tab_strip_model()->GetActiveWebContents(); browser()->tab_strip_model()->GetActiveWebContents();
for (int count = 0; count < kRepeats; ++count) { for (int count = 0; count < kRepeats; ++count) {
base::FilePath file_path; std::vector<base::FilePath> file_paths;
SharesheetClient::SetSharesheetCallbackForTesting( SharesheetClient::SetSharesheetCallbackForTesting(
base::BindLambdaForTesting( base::BindLambdaForTesting(
[contents, &file_path]( [contents, &file_paths](
content::WebContents* web_contents, std::vector<GURL> file_urls, content::WebContents* in_contents,
std::vector<base::FilePath> in_file_paths,
std::vector<std::string> content_types, std::vector<std::string> content_types,
SharesheetClient::CloseCallback close_callback) { SharesheetClient::CloseCallback close_callback) {
EXPECT_EQ(contents, web_contents); EXPECT_EQ(contents, in_contents);
EXPECT_EQ(file_urls.size(), 1U); file_paths = std::move(in_file_paths);
EXPECT_TRUE(net::FileURLToFilePath(file_urls[0], &file_path));
EXPECT_EQ(content_types.size(), 1U); EXPECT_EQ(content_types.size(), 1U);
EXPECT_EQ(content_types[0], "image/webp"); EXPECT_EQ(content_types[0], "image/webp");
...@@ -124,7 +122,8 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) { ...@@ -124,7 +122,8 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, RepeatedShare) {
})); }));
EXPECT_EQ("share succeeded", content::EvalJs(contents, script)); 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) { ...@@ -136,7 +135,8 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, CancelledShare) {
ui_test_utils::NavigateToURL(browser(), GetAppUrl()); ui_test_utils::NavigateToURL(browser(), GetAppUrl());
SharesheetClient::SetSharesheetCallbackForTesting(base::BindLambdaForTesting( 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, std::vector<std::string> content_types,
SharesheetClient::CloseCallback close_callback) { SharesheetClient::CloseCallback close_callback) {
std::move(close_callback).Run(sharesheet::SharesheetResult::kCancel); std::move(close_callback).Run(sharesheet::SharesheetResult::kCancel);
......
...@@ -116,7 +116,7 @@ class ShareServiceUnitTest : public ChromeRenderViewHostTestHarness { ...@@ -116,7 +116,7 @@ class ShareServiceUnitTest : public ChromeRenderViewHostTestHarness {
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
static void AcceptShareRequest(content::WebContents* web_contents, static void AcceptShareRequest(content::WebContents* web_contents,
std::vector<GURL> file_urls, std::vector<base::FilePath> file_paths,
std::vector<std::string> content_types, std::vector<std::string> content_types,
sharesheet::CloseCallback close_callback) { sharesheet::CloseCallback close_callback) {
std::move(close_callback).Run(sharesheet::SharesheetResult::kSuccess); 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