Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6648)

Unified Diff: chrome/browser/web_applications/web_app_mac_unittest.mm

Issue 1038573002: Fixed thread-unsafe use of gfx::Image in app shortcut creation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/web_applications/web_app_mac.mm ('k') | chrome/browser/web_applications/web_app_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/web_applications/web_app_mac_unittest.mm
diff --git a/chrome/browser/web_applications/web_app_mac_unittest.mm b/chrome/browser/web_applications/web_app_mac_unittest.mm
index 3b7fa4d309ca0e366322edda0c5fb82e1ee046c2..499ac56cf1441302844f11c00c35e797ee895880 100644
--- a/chrome/browser/web_applications/web_app_mac_unittest.mm
+++ b/chrome/browser/web_applications/web_app_mac_unittest.mm
@@ -13,6 +13,7 @@
#include "base/files/scoped_temp_dir.h"
#include "base/mac/foundation_util.h"
#include "base/mac/scoped_nsobject.h"
+#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
@@ -39,14 +40,14 @@ const char kFakeChromeBundleId[] = "fake.cfbundleidentifier";
class WebAppShortcutCreatorMock : public web_app::WebAppShortcutCreator {
public:
WebAppShortcutCreatorMock(const base::FilePath& app_data_dir,
- const web_app::ShortcutInfo& shortcut_info)
+ const web_app::ShortcutInfo* shortcut_info)
: WebAppShortcutCreator(app_data_dir,
shortcut_info,
extensions::FileHandlersInfo()) {}
WebAppShortcutCreatorMock(
const base::FilePath& app_data_dir,
- const web_app::ShortcutInfo& shortcut_info,
+ const web_app::ShortcutInfo* shortcut_info,
const extensions::FileHandlersInfo& file_handlers_info)
: WebAppShortcutCreator(app_data_dir, shortcut_info, file_handlers_info) {
}
@@ -60,15 +61,15 @@ class WebAppShortcutCreatorMock : public web_app::WebAppShortcutCreator {
DISALLOW_COPY_AND_ASSIGN(WebAppShortcutCreatorMock);
};
-web_app::ShortcutInfo GetShortcutInfo() {
- web_app::ShortcutInfo info;
- info.extension_id = "extensionid";
- info.extension_path = base::FilePath("/fake/extension/path");
- info.title = base::ASCIIToUTF16("Shortcut Title");
- info.url = GURL("http://example.com/");
- info.profile_path = base::FilePath("user_data_dir").Append("Profile 1");
- info.profile_name = "profile name";
- info.version_for_display = "stable 1.0";
+scoped_ptr<web_app::ShortcutInfo> GetShortcutInfo() {
+ scoped_ptr<web_app::ShortcutInfo> info(new web_app::ShortcutInfo);
+ info->extension_id = "extensionid";
+ info->extension_path = base::FilePath("/fake/extension/path");
+ info->title = base::ASCIIToUTF16("Shortcut Title");
+ info->url = GURL("http://example.com/");
+ info->profile_path = base::FilePath("user_data_dir").Append("Profile 1");
+ info->profile_name = "profile name";
+ info->version_for_display = "stable 1.0";
return info;
}
@@ -85,9 +86,8 @@ class WebAppShortcutCreatorTest : public testing::Test {
destination_dir_ = temp_destination_dir_.path();
info_ = GetShortcutInfo();
- shim_base_name_ = base::FilePath(
- info_.profile_path.BaseName().value() +
- " " + info_.extension_id + ".app");
+ shim_base_name_ = base::FilePath(info_->profile_path.BaseName().value() +
+ " " + info_->extension_id + ".app");
internal_shim_path_ = app_data_dir_.Append(shim_base_name_);
shim_path_ = destination_dir_.Append(shim_base_name_);
}
@@ -97,7 +97,7 @@ class WebAppShortcutCreatorTest : public testing::Test {
base::FilePath app_data_dir_;
base::FilePath destination_dir_;
- web_app::ShortcutInfo info_;
+ scoped_ptr<web_app::ShortcutInfo> info_;
base::FilePath shim_base_name_;
base::FilePath internal_shim_path_;
base::FilePath shim_path_;
@@ -112,7 +112,8 @@ class WebAppShortcutCreatorTest : public testing::Test {
namespace web_app {
TEST_F(WebAppShortcutCreatorTest, CreateShortcuts) {
- NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_, info_);
+ NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_,
+ info_.get());
EXPECT_CALL(shortcut_creator, GetApplicationsDirname())
.WillRepeatedly(Return(destination_dir_));
@@ -126,16 +127,16 @@ TEST_F(WebAppShortcutCreatorTest, CreateShortcuts) {
shim_path_.Append("Contents").Append("Info.plist");
NSDictionary* plist = [NSDictionary dictionaryWithContentsOfFile:
base::mac::FilePathToNSString(plist_path)];
- EXPECT_NSEQ(base::SysUTF8ToNSString(info_.extension_id),
+ EXPECT_NSEQ(base::SysUTF8ToNSString(info_->extension_id),
[plist objectForKey:app_mode::kCrAppModeShortcutIDKey]);
- EXPECT_NSEQ(base::SysUTF16ToNSString(info_.title),
+ EXPECT_NSEQ(base::SysUTF16ToNSString(info_->title),
[plist objectForKey:app_mode::kCrAppModeShortcutNameKey]);
- EXPECT_NSEQ(base::SysUTF8ToNSString(info_.url.spec()),
+ EXPECT_NSEQ(base::SysUTF8ToNSString(info_->url.spec()),
[plist objectForKey:app_mode::kCrAppModeShortcutURLKey]);
EXPECT_NSEQ(base::SysUTF8ToNSString(chrome::VersionInfo().Version()),
[plist objectForKey:app_mode::kCrBundleVersionKey]);
- EXPECT_NSEQ(base::SysUTF8ToNSString(info_.version_for_display),
+ EXPECT_NSEQ(base::SysUTF8ToNSString(info_->version_for_display),
[plist objectForKey:app_mode::kCFBundleShortVersionStringKey]);
// Make sure all values in the plist are actually filled in.
@@ -155,12 +156,13 @@ TEST_F(WebAppShortcutCreatorTest, UpdateShortcuts) {
base::FilePath other_folder = other_folder_temp_dir.path();
base::FilePath other_shim_path = other_folder.Append(shim_base_name_);
- NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_, info_);
+ NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_,
+ info_.get());
EXPECT_CALL(shortcut_creator, GetApplicationsDirname())
.WillRepeatedly(Return(destination_dir_));
std::string expected_bundle_id = kFakeChromeBundleId;
- expected_bundle_id += ".app.Profile-1-" + info_.extension_id;
+ expected_bundle_id += ".app.Profile-1-" + info_->extension_id;
EXPECT_CALL(shortcut_creator, GetAppBundleById(expected_bundle_id))
.WillOnce(Return(other_shim_path));
@@ -196,12 +198,13 @@ TEST_F(WebAppShortcutCreatorTest, DeleteShortcuts) {
base::FilePath other_folder = other_folder_temp_dir.path();
base::FilePath other_shim_path = other_folder.Append(shim_base_name_);
- NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_, info_);
+ NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_,
+ info_.get());
EXPECT_CALL(shortcut_creator, GetApplicationsDirname())
.WillRepeatedly(Return(destination_dir_));
std::string expected_bundle_id = kFakeChromeBundleId;
- expected_bundle_id += ".app.Profile-1-" + info_.extension_id;
+ expected_bundle_id += ".app.Profile-1-" + info_->extension_id;
EXPECT_CALL(shortcut_creator, GetAppBundleById(expected_bundle_id))
.WillOnce(Return(other_shim_path));
@@ -236,18 +239,20 @@ TEST_F(WebAppShortcutCreatorTest, DeleteShortcuts) {
TEST_F(WebAppShortcutCreatorTest, CreateAppListShortcut) {
// With an empty |profile_name|, the shortcut path should not have the profile
// directory prepended to the extension id on the app bundle name.
- info_.profile_name.clear();
+ info_->profile_name.clear();
base::FilePath dst_path =
- destination_dir_.Append(info_.extension_id + ".app");
+ destination_dir_.Append(info_->extension_id + ".app");
- NiceMock<WebAppShortcutCreatorMock> shortcut_creator(base::FilePath(), info_);
+ NiceMock<WebAppShortcutCreatorMock> shortcut_creator(base::FilePath(),
+ info_.get());
EXPECT_CALL(shortcut_creator, GetApplicationsDirname())
.WillRepeatedly(Return(destination_dir_));
EXPECT_EQ(dst_path.BaseName(), shortcut_creator.GetShortcutBasename());
}
TEST_F(WebAppShortcutCreatorTest, RunShortcut) {
- NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_, info_);
+ NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_,
+ info_.get());
EXPECT_CALL(shortcut_creator, GetApplicationsDirname())
.WillRepeatedly(Return(destination_dir_));
@@ -265,7 +270,8 @@ TEST_F(WebAppShortcutCreatorTest, CreateFailure) {
base::FilePath non_existent_path =
destination_dir_.Append("not-existent").Append("name.app");
- NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_, info_);
+ NiceMock<WebAppShortcutCreatorMock> shortcut_creator(app_data_dir_,
+ info_.get());
EXPECT_CALL(shortcut_creator, GetApplicationsDirname())
.WillRepeatedly(Return(non_existent_path));
EXPECT_FALSE(shortcut_creator.CreateShortcuts(
@@ -276,8 +282,8 @@ TEST_F(WebAppShortcutCreatorTest, UpdateIcon) {
gfx::Image product_logo =
ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
IDR_PRODUCT_LOGO_32);
- info_.favicon.Add(product_logo);
- WebAppShortcutCreatorMock shortcut_creator(app_data_dir_, info_);
+ info_->favicon.Add(product_logo);
+ WebAppShortcutCreatorMock shortcut_creator(app_data_dir_, info_.get());
ASSERT_TRUE(shortcut_creator.UpdateIcon(shim_path_));
base::FilePath icon_path =
@@ -291,7 +297,7 @@ TEST_F(WebAppShortcutCreatorTest, UpdateIcon) {
}
TEST_F(WebAppShortcutCreatorTest, RevealAppShimInFinder) {
- WebAppShortcutCreatorMock shortcut_creator(app_data_dir_, info_);
+ WebAppShortcutCreatorMock shortcut_creator(app_data_dir_, info_.get());
EXPECT_CALL(shortcut_creator, GetApplicationsDirname())
.WillRepeatedly(Return(destination_dir_));
@@ -321,7 +327,7 @@ TEST_F(WebAppShortcutCreatorTest, FileHandlers) {
file_handlers_info.push_back(handler_1);
NiceMock<WebAppShortcutCreatorMock> shortcut_creator(
- app_data_dir_, info_, file_handlers_info);
+ app_data_dir_, info_.get(), file_handlers_info);
EXPECT_CALL(shortcut_creator, GetApplicationsDirname())
.WillRepeatedly(Return(destination_dir_));
EXPECT_TRUE(shortcut_creator.CreateShortcuts(
« no previous file with comments | « chrome/browser/web_applications/web_app_mac.mm ('k') | chrome/browser/web_applications/web_app_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698