Commit 6d158c31 authored by Giovanni Ortuño Urquidi's avatar Giovanni Ortuño Urquidi Committed by Commit Bot

desktop-pwas: Wrap WebApplicationInfo in a unique_ptr

WebApplicationInfo is not moveable so wwhen calling std::move() on it,
we make a copy. To avoid this, wrap WebApplicationInfo in a unique_ptr.

Bug: 864904
Change-Id: I3568101b8ee209786b18127e515b694729aa2ed2
Reviewed-on: https://chromium-review.googlesource.com/1154733Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Commit-Queue: Giovanni Ortuño Urquidi <ortuno@chromium.org>
Cr-Commit-Position: refs/heads/master@{#578983}
parent 243d7335
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chrome/browser/web_applications/extensions/bookmark_app_data_retriever.h" #include "chrome/browser/web_applications/extensions/bookmark_app_data_retriever.h"
#include <memory>
#include <string> #include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
...@@ -40,7 +41,7 @@ void BookmarkAppDataRetriever::GetWebApplicationInfo( ...@@ -40,7 +41,7 @@ void BookmarkAppDataRetriever::GetWebApplicationInfo(
if (!entry) { if (!entry) {
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(std::move(get_web_app_info_callback_), base::nullopt)); base::BindOnce(std::move(get_web_app_info_callback_), nullptr));
return; return;
} }
...@@ -113,11 +114,11 @@ void BookmarkAppDataRetriever::OnGetWebApplicationInfo( ...@@ -113,11 +114,11 @@ void BookmarkAppDataRetriever::OnGetWebApplicationInfo(
content::NavigationEntry* entry = content::NavigationEntry* entry =
web_contents->GetController().GetLastCommittedEntry(); web_contents->GetController().GetLastCommittedEntry();
if (!entry || last_committed_nav_entry_unique_id != entry->GetUniqueID()) { if (!entry || last_committed_nav_entry_unique_id != entry->GetUniqueID()) {
std::move(get_web_app_info_callback_).Run(base::nullopt); std::move(get_web_app_info_callback_).Run(nullptr);
return; return;
} }
base::Optional<WebApplicationInfo> info(web_app_info); auto info = std::make_unique<WebApplicationInfo>(web_app_info);
if (info->app_url.is_empty()) if (info->app_url.is_empty())
info->app_url = web_contents->GetLastCommittedURL(); info->app_url = web_contents->GetLastCommittedURL();
...@@ -130,7 +131,7 @@ void BookmarkAppDataRetriever::OnGetWebApplicationInfo( ...@@ -130,7 +131,7 @@ void BookmarkAppDataRetriever::OnGetWebApplicationInfo(
} }
void BookmarkAppDataRetriever::OnGetWebApplicationInfoFailed() { void BookmarkAppDataRetriever::OnGetWebApplicationInfoFailed() {
std::move(get_web_app_info_callback_).Run(base::nullopt); std::move(get_web_app_info_callback_).Run(nullptr);
} }
} // namespace extensions } // namespace extensions
...@@ -5,12 +5,12 @@ ...@@ -5,12 +5,12 @@
#ifndef CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_BOOKMARK_APP_DATA_RETRIEVER_H_ #ifndef CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_BOOKMARK_APP_DATA_RETRIEVER_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_BOOKMARK_APP_DATA_RETRIEVER_H_ #define CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_BOOKMARK_APP_DATA_RETRIEVER_H_
#include <memory>
#include <vector> #include <vector>
#include "base/callback_forward.h" #include "base/callback_forward.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "chrome/common/chrome_render_frame.mojom.h" #include "chrome/common/chrome_render_frame.mojom.h"
#include "chrome/common/web_application_info.h" #include "chrome/common/web_application_info.h"
...@@ -25,7 +25,7 @@ namespace extensions { ...@@ -25,7 +25,7 @@ namespace extensions {
class BookmarkAppDataRetriever { class BookmarkAppDataRetriever {
public: public:
using GetWebApplicationInfoCallback = using GetWebApplicationInfoCallback =
base::OnceCallback<void(base::Optional<WebApplicationInfo>)>; base::OnceCallback<void(std::unique_ptr<WebApplicationInfo>)>;
using GetIconsCallback = using GetIconsCallback =
base::OnceCallback<void(std::vector<WebApplicationInfo::IconInfo>)>; base::OnceCallback<void(std::vector<WebApplicationInfo::IconInfo>)>;
......
...@@ -4,9 +4,11 @@ ...@@ -4,9 +4,11 @@
#include "chrome/browser/web_applications/extensions/bookmark_app_data_retriever.h" #include "chrome/browser/web_applications/extensions/bookmark_app_data_retriever.h"
#include <memory>
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "base/optional.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile.h"
...@@ -85,8 +87,8 @@ class BookmarkAppDataRetrieverTest : public ChromeRenderViewHostTestHarness { ...@@ -85,8 +87,8 @@ class BookmarkAppDataRetrieverTest : public ChromeRenderViewHostTestHarness {
void GetWebApplicationInfoCallback( void GetWebApplicationInfoCallback(
base::OnceClosure quit_closure, base::OnceClosure quit_closure,
base::Optional<WebApplicationInfo> web_app_info) { std::unique_ptr<WebApplicationInfo> web_app_info) {
web_app_info_ = web_app_info; web_app_info_ = std::move(web_app_info);
std::move(quit_closure).Run(); std::move(quit_closure).Run();
} }
...@@ -101,14 +103,14 @@ class BookmarkAppDataRetrieverTest : public ChromeRenderViewHostTestHarness { ...@@ -101,14 +103,14 @@ class BookmarkAppDataRetrieverTest : public ChromeRenderViewHostTestHarness {
return content::WebContentsTester::For(web_contents()); return content::WebContentsTester::For(web_contents());
} }
const base::Optional<WebApplicationInfo>& web_app_info() { const std::unique_ptr<WebApplicationInfo>& web_app_info() {
return web_app_info_.value(); return web_app_info_.value();
} }
const std::vector<WebApplicationInfo::IconInfo>& icons() { return icons_; } const std::vector<WebApplicationInfo::IconInfo>& icons() { return icons_; }
private: private:
base::Optional<base::Optional<WebApplicationInfo>> web_app_info_; base::Optional<std::unique_ptr<WebApplicationInfo>> web_app_info_;
std::vector<WebApplicationInfo::IconInfo> icons_; std::vector<WebApplicationInfo::IconInfo> icons_;
DISALLOW_COPY_AND_ASSIGN(BookmarkAppDataRetrieverTest); DISALLOW_COPY_AND_ASSIGN(BookmarkAppDataRetrieverTest);
...@@ -124,7 +126,7 @@ TEST_F(BookmarkAppDataRetrieverTest, GetWebApplicationInfo_NoEntry) { ...@@ -124,7 +126,7 @@ TEST_F(BookmarkAppDataRetrieverTest, GetWebApplicationInfo_NoEntry) {
base::Unretained(this), run_loop.QuitClosure())); base::Unretained(this), run_loop.QuitClosure()));
run_loop.Run(); run_loop.Run();
EXPECT_EQ(base::nullopt, web_app_info()); EXPECT_EQ(nullptr, web_app_info());
} }
TEST_F(BookmarkAppDataRetrieverTest, GetWebApplicationInfo_AppUrlAbsent) { TEST_F(BookmarkAppDataRetrieverTest, GetWebApplicationInfo_AppUrlAbsent) {
...@@ -242,7 +244,7 @@ TEST_F(BookmarkAppDataRetrieverTest, ...@@ -242,7 +244,7 @@ TEST_F(BookmarkAppDataRetrieverTest,
DeleteContents(); DeleteContents();
run_loop.Run(); run_loop.Run();
EXPECT_EQ(base::nullopt, web_app_info()); EXPECT_EQ(nullptr, web_app_info());
} }
TEST_F(BookmarkAppDataRetrieverTest, GetWebApplicationInfo_FrameNavigated) { TEST_F(BookmarkAppDataRetrieverTest, GetWebApplicationInfo_FrameNavigated) {
...@@ -261,7 +263,7 @@ TEST_F(BookmarkAppDataRetrieverTest, GetWebApplicationInfo_FrameNavigated) { ...@@ -261,7 +263,7 @@ TEST_F(BookmarkAppDataRetrieverTest, GetWebApplicationInfo_FrameNavigated) {
web_contents_tester()->NavigateAndCommit(GURL(kFooUrl2)); web_contents_tester()->NavigateAndCommit(GURL(kFooUrl2));
run_loop.Run(); run_loop.Run();
EXPECT_EQ(base::nullopt, web_app_info()); EXPECT_EQ(nullptr, web_app_info());
} }
TEST_F(BookmarkAppDataRetrieverTest, GetIcons_NoIconsProvided) { TEST_F(BookmarkAppDataRetrieverTest, GetIcons_NoIconsProvided) {
......
...@@ -64,7 +64,7 @@ class BookmarkAppInstallationTaskTest : public ChromeRenderViewHostTestHarness { ...@@ -64,7 +64,7 @@ class BookmarkAppInstallationTaskTest : public ChromeRenderViewHostTestHarness {
// when running callbacks to simulate async behavior in tests as well. // when running callbacks to simulate async behavior in tests as well.
class TestDataRetriever : public BookmarkAppDataRetriever { class TestDataRetriever : public BookmarkAppDataRetriever {
public: public:
explicit TestDataRetriever(base::Optional<WebApplicationInfo> web_app_info) explicit TestDataRetriever(std::unique_ptr<WebApplicationInfo> web_app_info)
: web_app_info_(std::move(web_app_info)) {} : web_app_info_(std::move(web_app_info)) {}
~TestDataRetriever() override = default; ~TestDataRetriever() override = default;
...@@ -73,7 +73,8 @@ class TestDataRetriever : public BookmarkAppDataRetriever { ...@@ -73,7 +73,8 @@ class TestDataRetriever : public BookmarkAppDataRetriever {
GetWebApplicationInfoCallback callback) override { GetWebApplicationInfoCallback callback) override {
DCHECK(web_contents); DCHECK(web_contents);
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), web_app_info_)); FROM_HERE,
base::BindOnce(std::move(callback), std::move(web_app_info_)));
} }
void GetIcons(const GURL& app_url, void GetIcons(const GURL& app_url,
...@@ -85,7 +86,7 @@ class TestDataRetriever : public BookmarkAppDataRetriever { ...@@ -85,7 +86,7 @@ class TestDataRetriever : public BookmarkAppDataRetriever {
} }
private: private:
base::Optional<WebApplicationInfo> web_app_info_; std::unique_ptr<WebApplicationInfo> web_app_info_;
DISALLOW_COPY_AND_ASSIGN(TestDataRetriever); DISALLOW_COPY_AND_ASSIGN(TestDataRetriever);
}; };
...@@ -93,7 +94,7 @@ class TestDataRetriever : public BookmarkAppDataRetriever { ...@@ -93,7 +94,7 @@ class TestDataRetriever : public BookmarkAppDataRetriever {
TEST_F(BookmarkAppInstallationTaskTest, ShortcutFromContents_Delete) { TEST_F(BookmarkAppInstallationTaskTest, ShortcutFromContents_Delete) {
auto installer = std::make_unique<BookmarkAppShortcutInstallationTask>(); auto installer = std::make_unique<BookmarkAppShortcutInstallationTask>();
installer->SetDataRetrieverForTesting( installer->SetDataRetrieverForTesting(
std::make_unique<TestDataRetriever>(base::nullopt)); std::make_unique<TestDataRetriever>(nullptr));
base::RunLoop run_loop; base::RunLoop run_loop;
installer->InstallFromWebContents( installer->InstallFromWebContents(
...@@ -109,7 +110,7 @@ TEST_F(BookmarkAppInstallationTaskTest, ShortcutFromContents_Delete) { ...@@ -109,7 +110,7 @@ TEST_F(BookmarkAppInstallationTaskTest, ShortcutFromContents_Delete) {
TEST_F(BookmarkAppInstallationTaskTest, ShortcutFromContents_NoWebAppInfo) { TEST_F(BookmarkAppInstallationTaskTest, ShortcutFromContents_NoWebAppInfo) {
auto installer = std::make_unique<BookmarkAppShortcutInstallationTask>(); auto installer = std::make_unique<BookmarkAppShortcutInstallationTask>();
installer->SetDataRetrieverForTesting( installer->SetDataRetrieverForTesting(
std::make_unique<TestDataRetriever>(base::nullopt)); std::make_unique<TestDataRetriever>(nullptr));
base::RunLoop run_loop; base::RunLoop run_loop;
installer->InstallFromWebContents( installer->InstallFromWebContents(
...@@ -130,7 +131,7 @@ TEST_F(BookmarkAppInstallationTaskTest, ShortcutFromContents_NoManifest) { ...@@ -130,7 +131,7 @@ TEST_F(BookmarkAppInstallationTaskTest, ShortcutFromContents_NoManifest) {
info.app_url = GURL(kWebAppUrl); info.app_url = GURL(kWebAppUrl);
info.title = base::UTF8ToUTF16(kWebAppTitle); info.title = base::UTF8ToUTF16(kWebAppTitle);
installer->SetDataRetrieverForTesting(std::make_unique<TestDataRetriever>( installer->SetDataRetrieverForTesting(std::make_unique<TestDataRetriever>(
base::make_optional(std::move(info)))); std::make_unique<WebApplicationInfo>(std::move(info))));
base::RunLoop run_loop; base::RunLoop run_loop;
installer->InstallFromWebContents( installer->InstallFromWebContents(
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chrome/browser/web_applications/extensions/bookmark_app_shortcut_installation_task.h" #include "chrome/browser/web_applications/extensions/bookmark_app_shortcut_installation_task.h"
#include <memory>
#include <utility> #include <utility>
#include <vector> #include <vector>
...@@ -35,7 +36,7 @@ void BookmarkAppShortcutInstallationTask::InstallFromWebContents( ...@@ -35,7 +36,7 @@ void BookmarkAppShortcutInstallationTask::InstallFromWebContents(
void BookmarkAppShortcutInstallationTask::OnGetWebApplicationInfo( void BookmarkAppShortcutInstallationTask::OnGetWebApplicationInfo(
ResultCallback result_callback, ResultCallback result_callback,
base::Optional<WebApplicationInfo> web_app_info) { std::unique_ptr<WebApplicationInfo> web_app_info) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!web_app_info) { if (!web_app_info) {
std::move(result_callback).Run(Result::kGetWebApplicationInfoFailed); std::move(result_callback).Run(Result::kGetWebApplicationInfoFailed);
......
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
#ifndef CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_BOOKMARK_APP_SHORTCUT_INSTALLATION_TASK_H_ #ifndef CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_BOOKMARK_APP_SHORTCUT_INSTALLATION_TASK_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_BOOKMARK_APP_SHORTCUT_INSTALLATION_TASK_H_ #define CHROME_BROWSER_WEB_APPLICATIONS_EXTENSIONS_BOOKMARK_APP_SHORTCUT_INSTALLATION_TASK_H_
#include <memory>
#include <vector> #include <vector>
#include "base/callback.h" #include "base/callback.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "chrome/browser/web_applications/extensions/bookmark_app_installation_task.h" #include "chrome/browser/web_applications/extensions/bookmark_app_installation_task.h"
#include "chrome/common/web_application_info.h" #include "chrome/common/web_application_info.h"
...@@ -30,8 +30,9 @@ class BookmarkAppShortcutInstallationTask : public BookmarkAppInstallationTask { ...@@ -30,8 +30,9 @@ class BookmarkAppShortcutInstallationTask : public BookmarkAppInstallationTask {
ResultCallback callback); ResultCallback callback);
private: private:
void OnGetWebApplicationInfo(ResultCallback result_callback, void OnGetWebApplicationInfo(
base::Optional<WebApplicationInfo> web_app_info); ResultCallback result_callback,
std::unique_ptr<WebApplicationInfo> web_app_info);
void OnGetIcons(ResultCallback result_callback, void OnGetIcons(ResultCallback result_callback,
std::vector<WebApplicationInfo::IconInfo> icons); std::vector<WebApplicationInfo::IconInfo> icons);
......
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