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

Unified Diff: chrome/browser/extensions/api/downloads/downloads_api_unittest.cc

Issue 10828372: Deflakify DownloadExtensionTest by not depending on the icon loader (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 8 years, 4 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
diff --git a/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc b/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
index f81e73680ee5ba76eff1f865ef64db78b69beed6..d4cd8d372bda338d495a8bf8f5767e6ad4fb8c22 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
@@ -45,7 +45,6 @@
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_job.h"
#include "net/url_request/url_request_job_factory.h"
-#include "ui/gfx/codec/png_codec.h"
#include "webkit/blob/blob_data.h"
#include "webkit/blob/blob_storage_controller.h"
#include "webkit/blob/blob_url_request_job.h"
@@ -507,29 +506,6 @@ class DownloadExtensionTest : public ExtensionApiTest {
return base::StringPrintf("[%d]", download_item->GetId());
}
- // Checks if a data URL encoded image is a PNG of a given size.
- void ExpectDataURLIsPNGWithSize(const std::string& url, int expected_size) {
- std::string mime_type;
- std::string charset;
- std::string data;
- EXPECT_FALSE(url.empty());
- EXPECT_TRUE(net::DataURL::Parse(GURL(url), &mime_type, &charset, &data));
- EXPECT_STREQ("image/png", mime_type.c_str());
- EXPECT_FALSE(data.empty());
-
- if (data.empty())
- return;
-
- int width = -1, height = -1;
- std::vector<unsigned char> decoded_data;
- EXPECT_TRUE(gfx::PNGCodec::Decode(
- reinterpret_cast<const unsigned char*>(data.c_str()), data.length(),
- gfx::PNGCodec::FORMAT_RGBA, &decoded_data,
- &width, &height));
- EXPECT_EQ(expected_size, width);
- EXPECT_EQ(expected_size, height);
- }
-
const FilePath& downloads_directory() {
return downloads_directory_.path();
}
@@ -897,105 +873,85 @@ IN_PROC_BROWSER_TEST_F(
error.c_str());
}
+UIThreadExtensionFunction* MockedGetFileIconFunction(
+ const FilePath& expected_path,
+ IconLoader::IconSize icon_size,
+ const std::string& response) {
+ scoped_refptr<DownloadsGetFileIconFunction> function(
+ new DownloadsGetFileIconFunction());
+ function->SetIconExtractorForTesting(new MockIconExtractorImpl(
+ expected_path, icon_size, response));
+ return function.release();
+}
+
// Test downloads.getFileIcon() on in-progress, finished, cancelled and deleted
// download items.
-// The test fails under ASan, see http://crbug.com/138211
-#if defined(ADDRESS_SANITIZER)
-#define MAYBE_DownloadExtensionTest_FileIcon_Active \
- DISABLED_DownloadExtensionTest_FileIcon_Active
-#else
-#define MAYBE_DownloadExtensionTest_FileIcon_Active \
- DownloadExtensionTest_FileIcon_Active
-#endif
IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
- MAYBE_DownloadExtensionTest_FileIcon_Active) {
+ DownloadExtensionTest_FileIcon_Active) {
DownloadItem* download_item = CreateSlowTestDownload();
ASSERT_TRUE(download_item);
+ std::string args32(base::StringPrintf("[%d, {\"size\": 32}]",
+ download_item->GetId()));
+ std::string result_string;
// Get the icon for the in-progress download. This call should succeed even
// if the file type isn't registered.
- std::string args = base::StringPrintf("[%d, {}]", download_item->GetId());
- std::string result_string;
- EXPECT_TRUE(RunFunctionAndReturnString(new DownloadsGetFileIconFunction(),
- args, &result_string));
-
- // Note: We are checking if the result is a Data URL that has encoded
- // image/png data for an icon of a specific size. Of these, only the icon size
- // is specified in the API contract. The image type (image/png) and URL type
- // (Data) are implementation details.
-
- // The default size for icons returned by getFileIcon() is 32x32.
- ExpectDataURLIsPNGWithSize(result_string, 32);
-
// Test whether the correct path is being pased into the icon extractor.
- FilePath expected_path(download_item->GetTargetFilePath());
- scoped_refptr<DownloadsGetFileIconFunction> function(
- new DownloadsGetFileIconFunction());
- function->SetIconExtractorForTesting(new MockIconExtractorImpl(
- expected_path, IconLoader::NORMAL, "foo"));
- EXPECT_TRUE(RunFunctionAndReturnString(function.release(), args,
- &result_string));
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"),
+ base::StringPrintf("[%d, {}]", download_item->GetId()), &result_string));
// Now try a 16x16 icon.
- args = base::StringPrintf("[%d, {\"size\": 16}]", download_item->GetId());
- EXPECT_TRUE(RunFunctionAndReturnString(new DownloadsGetFileIconFunction(),
- args, &result_string));
- ExpectDataURLIsPNGWithSize(result_string, 16);
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ download_item->GetTargetFilePath(), IconLoader::SMALL, "foo"),
+ base::StringPrintf("[%d, {\"size\": 16}]", download_item->GetId()),
+ &result_string));
// Explicitly asking for 32x32 should give us a 32x32 icon.
- args = base::StringPrintf("[%d, {\"size\": 32}]", download_item->GetId());
- EXPECT_TRUE(RunFunctionAndReturnString(new DownloadsGetFileIconFunction(),
- args, &result_string));
- ExpectDataURLIsPNGWithSize(result_string, 32);
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"),
+ args32, &result_string));
// Finish the download and try again.
FinishPendingSlowDownloads();
EXPECT_EQ(DownloadItem::COMPLETE, download_item->GetState());
- EXPECT_TRUE(RunFunctionAndReturnString(new DownloadsGetFileIconFunction(),
- args, &result_string));
- ExpectDataURLIsPNGWithSize(result_string, 32);
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"),
+ args32, &result_string));
// Check the path passed to the icon extractor post-completion.
- function = new DownloadsGetFileIconFunction();
- function->SetIconExtractorForTesting(new MockIconExtractorImpl(
- expected_path, IconLoader::NORMAL, "foo"));
- EXPECT_TRUE(RunFunctionAndReturnString(function.release(), args,
- &result_string));
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"),
+ args32, &result_string));
// Now create another download.
download_item = CreateSlowTestDownload();
+ args32 = base::StringPrintf("[%d, {\"size\": 32}]", download_item->GetId());
ASSERT_TRUE(download_item);
- expected_path = download_item->GetTargetFilePath();
// Cancel the download. As long as the download has a target path, we should
// be able to query the file icon.
download_item->Cancel(true);
// Let cleanup complete on the FILE thread.
content::RunAllPendingInMessageLoop(BrowserThread::FILE);
- args = base::StringPrintf("[%d, {\"size\": 32}]", download_item->GetId());
- EXPECT_TRUE(RunFunctionAndReturnString(new DownloadsGetFileIconFunction(),
- args, &result_string));
- ExpectDataURLIsPNGWithSize(result_string, 32);
-
// Check the path passed to the icon extractor post-cancellation.
- function = new DownloadsGetFileIconFunction();
- function->SetIconExtractorForTesting(new MockIconExtractorImpl(
- expected_path, IconLoader::NORMAL, "foo"));
- EXPECT_TRUE(RunFunctionAndReturnString(function.release(), args,
- &result_string));
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"),
+ args32,
+ &result_string));
// Simulate an error during icon load by invoking the mock with an empty
// result string.
- function = new DownloadsGetFileIconFunction();
- function->SetIconExtractorForTesting(new MockIconExtractorImpl(
- expected_path, IconLoader::NORMAL, ""));
- std::string error = RunFunctionAndReturnError(function.release(), args);
+ std::string error = RunFunctionAndReturnError(MockedGetFileIconFunction(
+ download_item->GetTargetFilePath(), IconLoader::NORMAL, ""),
+ args32);
EXPECT_STREQ(download_extension_errors::kIconNotFoundError,
error.c_str());
// Once the download item is deleted, we should return kInvalidOperationError.
download_item->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
- error = RunFunctionAndReturnError(new DownloadsGetFileIconFunction(), args);
+ download_item = NULL;
+ error = RunFunctionAndReturnError(new DownloadsGetFileIconFunction(), args32);
EXPECT_STREQ(download_extension_errors::kInvalidOperationError,
error.c_str());
}
@@ -1004,16 +960,8 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
// whether they exist or not. If the file doesn't exist we should receive a
// generic icon from the OS/toolkit that may or may not be specific to the file
// type.
-// The test fails under ASan, see http://crbug.com/138211
-#if defined(ADDRESS_SANITIZER)
-#define MAYBE_DownloadExtensionTest_FileIcon_History \
- DISABLED_DownloadExtensionTest_FileIcon_History
-#else
-#define MAYBE_DownloadExtensionTest_FileIcon_History \
- DownloadExtensionTest_FileIcon_History
-#endif
IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
- MAYBE_DownloadExtensionTest_FileIcon_History) {
+ DownloadExtensionTest_FileIcon_History) {
const HistoryDownloadInfo kHistoryInfo[] = {
{ FILE_PATH_LITERAL("real.txt"),
DownloadItem::COMPLETE,
@@ -1036,25 +984,13 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
for (DownloadManager::DownloadVector::iterator iter = all_downloads.begin();
iter != all_downloads.end();
++iter) {
- std::string args(base::StringPrintf("[%d, {\"size\": 32}]",
- (*iter)->GetId()));
std::string result_string;
- EXPECT_TRUE(RunFunctionAndReturnString(
- new DownloadsGetFileIconFunction(), args, &result_string));
- // Note: We are checking if the result is a Data URL that has encoded
- // image/png data for an icon of a specific size. Of these, only the icon
- // size is specified in the API contract. The image type (image/png) and URL
- // type (Data) are implementation details.
- ExpectDataURLIsPNGWithSize(result_string, 32);
-
// Use a MockIconExtractorImpl to test if the correct path is being passed
// into the DownloadFileIconExtractor.
- scoped_refptr<DownloadsGetFileIconFunction> function(
- new DownloadsGetFileIconFunction());
- function->SetIconExtractorForTesting(new MockIconExtractorImpl(
- (*iter)->GetFullPath(), IconLoader::NORMAL, "hello"));
- EXPECT_TRUE(RunFunctionAndReturnString(function.release(), args,
- &result_string));
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ (*iter)->GetFullPath(), IconLoader::NORMAL, "hello"),
+ base::StringPrintf("[%d, {\"size\": 32}]", (*iter)->GetId()),
+ &result_string));
EXPECT_STREQ("hello", result_string.c_str());
}
@@ -1321,18 +1257,8 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
// test that on-record downloads are visible in both incognito and on-record
// contexts, for DownloadsSearchFunction, DownloadsPauseFunction,
// DownloadsResumeFunction, and DownloadsCancelFunction.
-// The test fails under ASan, see http://crbug.com/138211
-#if defined(ADDRESS_SANITIZER)
-#define \
- MAYBE_DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito \
- DISABLED_DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito
-#else
-#define \
- MAYBE_DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito \
- DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito
-#endif
IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
- MAYBE_DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito) {
+ DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito) {
scoped_ptr<base::Value> result_value;
base::ListValue* result_list = NULL;
base::DictionaryValue* result_dict = NULL;
@@ -1411,11 +1337,11 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
// Do the FileIcon test for both the on- and off-items while off the record.
// NOTE(benjhayden): This does not include the FileIcon test from history,
// just active downloads. This shouldn't be a problem.
- EXPECT_TRUE(RunFunctionAndReturnString(
- new DownloadsGetFileIconFunction(),
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ on_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"),
base::StringPrintf("[%d, {}]", on_item->GetId()), &result_string));
- EXPECT_TRUE(RunFunctionAndReturnString(
- new DownloadsGetFileIconFunction(),
+ EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
+ off_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"),
base::StringPrintf("[%d, {}]", off_item->GetId()), &result_string));
// Do the pause/resume/cancel test for both the on- and off-items while off
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698