downloads_api_browsertest.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Disable everything on windows only. http://crbug.com/306144 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef OS_WIN 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_reader.h" 139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 165e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h" 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/synchronization/waitable_event.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_file_icon_extractor.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service_factory.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/download/download_test_file_activity_observer.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/downloads/downloads_api.h" 23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/extensions/browser_action_test_util.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_function_test_utils.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/download_row.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/url_request_mock_util.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_item.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/common/content_switches.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/download_test_observer.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/test/net/url_request_slow_download_job.h" 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/browser/event_router.h" 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/notification_types.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/data_url.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_job.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_job_factory.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_job_factory_impl.h" 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/file_system_context.h" 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/browser/fileapi/file_system_operation_runner.h" 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/file_system_url.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserContext; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadItem; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadManager; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::URLRequestSlowDownloadJob; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace errors = download_extension_errors; 65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace extensions { 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace downloads = api::downloads; 68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Comparator that orders download items by their ID. Can be used with 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// std::sort. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct DownloadIdComparator { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator() (DownloadItem* first, DownloadItem* second) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return first->GetId() < second->GetId(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadsEventsListener : public content::NotificationObserver { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadsEventsListener() 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : waiting_(false) { 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) registrar_.Add(this, 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DownloadsEventsListener() { 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) registrar_.Remove(this, 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STLDeleteElements(&events_); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClearEvents() { 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) STLDeleteElements(&events_); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) events_.clear(); 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Event { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Event(Profile* profile, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& event_name, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& json_args, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time caught) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : profile_(profile), 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_name_(event_name), 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) json_args_(json_args), 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args_(base::JSONReader::Read(json_args)), 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) caught_(caught) { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& caught() { return caught_; } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool Satisfies(const Event& other) const { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return other.SatisfiedBy(*this); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool SatisfiedBy(const Event& other) const { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((profile_ != other.profile_) || 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (event_name_ != other.event_name_)) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (((event_name_ == downloads::OnDeterminingFilename::kEventName) || 1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu (event_name_ == downloads::OnCreated::kEventName) || 1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu (event_name_ == downloads::OnChanged::kEventName)) && 1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu args_.get() && other.args_.get()) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* left_list = NULL; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* left_dict = NULL; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* right_list = NULL; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* right_dict = NULL; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!args_->GetAsList(&left_list) || 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !other.args_->GetAsList(&right_list) || 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !left_list->GetDictionary(0, &left_dict) || 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !right_list->GetDictionary(0, &right_dict)) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (base::DictionaryValue::Iterator iter(*left_dict); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !iter.IsAtEnd(); iter.Advance()) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value* right_value = NULL; 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!right_dict->HasKey(iter.key()) || 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) (right_dict->Get(iter.key(), &right_value) && 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !iter.value().Equals(right_value))) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else if ((event_name_ == downloads::OnErased::kEventName) && 1475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu args_.get() && other.args_.get()) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int my_id = -1, other_id = -1; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (args_->GetAsInteger(&my_id) && 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) other.args_->GetAsInteger(&other_id) && 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) my_id == other_id); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return json_args_ == other.json_args_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string Debug() { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("Event(%p, %s, %s, %f)", 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_name_.c_str(), 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) json_args_.c_str(), 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) caught_.ToJsTime()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string event_name_; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string json_args_; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> args_; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time caught_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Event); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef ExtensionDownloadsEventRouter::DownloadsNotificationSource 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadsNotificationSource; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Observe(int type, 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationSource& source, 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case extensions::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT: { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadsNotificationSource* dns = 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<DownloadsNotificationSource>(source).ptr(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Event* new_event = new Event( 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns->profile, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns->event_name, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *content::Details<std::string>(details).ptr(), base::Time::Now()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) events_.push_back(new_event); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (waiting_ && 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_for_.get() && 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new_event->Satisfies(*waiting_for_)) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = false; 19390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI::current()->Quit(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitFor(Profile* profile, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& event_name, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& json_args) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_for_.reset(new Event(profile, event_name, json_args, base::Time())); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::deque<Event*>::const_iterator iter = events_.begin(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != events_.end(); ++iter) { 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if ((*iter)->Satisfies(*waiting_for_.get())) { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = true; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success = !waiting_; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (waiting_) { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Print the events that were caught since the last WaitFor() call to help 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // find the erroneous event. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(benjhayden) Fuzzy-match and highlight the erroneous event. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::deque<Event*>::const_iterator iter = events_.begin(); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != events_.end(); ++iter) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*iter)->caught() > last_wait_) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Caught " << (*iter)->Debug(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (waiting_for_.get()) { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Timed out waiting for " << waiting_for_->Debug(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = false; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_for_.reset(); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_wait_ = base::Time::Now(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return success; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool waiting_; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_wait_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Event> waiting_for_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::deque<Event*> events_; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadsEventsListener); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadExtensionTest : public ExtensionApiTest { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest() 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : extension_(NULL), 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_browser_(NULL), 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser_(NULL) { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used with CreateHistoryDownloads 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct HistoryDownloadInfo { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filename to use. CreateHistoryDownloads will append this filename to the 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // temporary downloads directory specified by downloads_directory(). 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::CharType* filename; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // State for the download. Note that IN_PROGRESS downloads will be created 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as CANCELLED. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::DownloadState state; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Danger type for the download. Only use DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadDangerType danger_type; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadExtension(const char* name) { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Store the created Extension object so that we can attach it to 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunctions. Also load the extension in incognito profiles for 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing incognito. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = LoadExtensionIncognito(test_data_dir_.AppendASCII(name)); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(extension_); 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WebContents* tab = chrome::AddSelectedTabWithURL( 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) current_browser(), 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_->GetResourceURL("empty.html"), 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::PAGE_TRANSITION_LINK); 279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile()) 2805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ->AddEventListener(downloads::OnCreated::kEventName, 2810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch tab->GetRenderProcessHost(), 2820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId()); 283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile()) 2845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ->AddEventListener(downloads::OnChanged::kEventName, 2850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch tab->GetRenderProcessHost(), 2860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId()); 287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile()) 2885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ->AddEventListener(downloads::OnErased::kEventName, 2890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch tab->GetRenderProcessHost(), 2900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderProcessHost* AddFilenameDeterminer() { 294010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ExtensionDownloadsEventRouter::SetDetermineFilenameTimeoutSecondsForTesting( 295010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = chrome::AddSelectedTabWithURL( 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser(), 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_->GetResourceURL("empty.html"), 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::PAGE_TRANSITION_LINK); 300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile()) 3015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ->AddEventListener(downloads::OnDeterminingFilename::kEventName, 3025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu tab->GetRenderProcessHost(), 3035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetExtensionId()); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return tab->GetRenderProcessHost(); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveFilenameDeterminer(content::RenderProcessHost* host) { 308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile())->RemoveEventListener( 309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) downloads::OnDeterminingFilename::kEventName, host, GetExtensionId()); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* current_browser() { return current_browser_; } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InProcessBrowserTest 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionApiTest::SetUpOnMainThread(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InProcessBrowserTest::SetUpOnMainThread(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateAndSetDownloadsDirectory(); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser()->profile()->GetPrefs()->SetBoolean( 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kPromptForDownload, false); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOnRecordManager()->RemoveAllDownloads(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) events_listener_.reset(new DownloadsEventsListener()); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable file chooser for current profile. 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadTestFileActivityObserver observer(current_browser()->profile()); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.EnableFileChooser(false); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GoOnTheRecord() { current_browser_ = browser(); } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GoOffTheRecord() { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!incognito_browser_) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_browser_ = CreateIncognitoBrowser(); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOffRecordManager()->RemoveAllDownloads(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable file chooser for incognito profile. 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadTestFileActivityObserver observer(incognito_browser_->profile()); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.EnableFileChooser(false); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser_ = incognito_browser_; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitFor(const std::string& event_name, const std::string& json_args) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return events_listener_->WaitFor( 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser()->profile(), event_name, json_args); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 350558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool WaitForInterruption( 351558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DownloadItem* item, 352558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DownloadInterruptReason expected_error, 353558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const std::string& on_created_event) { 3545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!WaitFor(downloads::OnCreated::kEventName, on_created_event)) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now, onCreated is always fired before interruption. 3575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return WaitFor( 3585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::OnChanged::kEventName, 3595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 3605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 3615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"error\": {\"current\": \"%s\"}," 3625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 3635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 3645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"interrupted\"}}]", 3655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId(), 3665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::DownloadInterruptReasonToString(expected_error).c_str())); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClearEvents() { 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) events_listener_->ClearEvents(); 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetExtensionURL() { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_->url().spec(); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetExtensionId() { 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return extension_->id(); 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetFilename(const char* path) { 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result = 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) downloads_directory_.path().AppendASCII(path).AsUTF8Unsafe(); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::string::size_type next = result.find("\\"); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next != std::string::npos; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next = result.find("\\", next)) { 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result.replace(next, 1, "\\\\"); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next += 2; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager* GetOnRecordManager() { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BrowserContext::GetDownloadManager(browser()->profile()); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager* GetOffRecordManager() { 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BrowserContext::GetDownloadManager( 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile()); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager* GetCurrentManager() { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (current_browser_ == incognito_browser_) ? 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOffRecordManager() : GetOnRecordManager(); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a set of history downloads based on the provided |history_info| 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // array. |count| is the number of elements in |history_info|. On success, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |items| will contain |count| DownloadItems in the order that they were 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified in |history_info|. Returns true on success and false otherwise. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CreateHistoryDownloads(const HistoryDownloadInfo* history_info, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t count, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector* items) { 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadIdComparator download_id_comparator; 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time current = base::Time::Now(); 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) items->clear(); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetOnRecordManager()->GetAllDownloads(items); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK_EQ(0, static_cast<int>(items->size())); 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<GURL> url_chain; 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url_chain.push_back(GURL()); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < count; ++i) { 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetOnRecordManager()->CreateDownloadItem( 4227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::DownloadItem::kInvalidId + 1 + i, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) downloads_directory().Append(history_info[i].filename), 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) downloads_directory().Append(history_info[i].filename), 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url_chain, GURL(), // URL Chain, referrer 426f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string(), std::string(), // mime_type, original_mime_type 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current, current, // start_time, end_time 428ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(), std::string(), // etag, last_modified 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, 1, // received_bytes, total_bytes 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_info[i].state, // state 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::DOWNLOAD_INTERRUPT_REASON_NONE, 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); // opened 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) items->push_back(item); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Order by ID so that they are in the order that we created them. 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::sort(items->begin(), items->end(), download_id_comparator); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the danger type if necessary. 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < count; ++i) { 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (history_info[i].danger_type != 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS) { 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT, 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_info[i].danger_type); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items->at(i)->OnContentCheckCompleted(history_info[i].danger_type); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateSlowTestDownloads( 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t count, DownloadManager::DownloadVector* items) { 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < count; ++i) { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateInProgressDownloadObserver(1)); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL slow_download_url(URLRequestSlowDownloadJob::kUnknownSizeUrl); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser(), slow_download_url, CURRENT_TAB, 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->WaitForFinished(); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1u, observer->NumDownloadsSeenInState(DownloadItem::IN_PROGRESS)); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCurrentManager()->GetAllDownloads(items); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(count, items->size()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* CreateSlowTestDownload() { 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateInProgressDownloadObserver(1)); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL slow_download_url(URLRequestSlowDownloadJob::kUnknownSizeUrl); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager* manager = GetCurrentManager(); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, manager->NonMaliciousInProgressCount()); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, manager->InProgressCount()); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager->InProgressCount() != 0) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser(), slow_download_url, CURRENT_TAB, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->WaitForFinished(); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::IN_PROGRESS)); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager->GetAllDownloads(&items); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* new_item = NULL; 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DownloadManager::DownloadVector::iterator iter = items.begin(); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != items.end(); ++iter) { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*iter)->GetState() == DownloadItem::IN_PROGRESS) { 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be only one IN_PROGRESS item. 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, new_item); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_item = *iter; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new_item; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FinishPendingSlowDownloads() { 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateDownloadObserver(1)); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL finish_url(URLRequestSlowDownloadJob::kFinishDownloadUrl); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser(), finish_url, NEW_FOREGROUND_TAB, 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->WaitForFinished(); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadTestObserver* CreateDownloadObserver(size_t download_count) { 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new content::DownloadTestObserverTerminal( 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCurrentManager(), download_count, 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadTestObserver* CreateInProgressDownloadObserver( 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t download_count) { 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new content::DownloadTestObserverInProgress( 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCurrentManager(), download_count); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool RunFunction(UIThreadExtensionFunction* function, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& args) { 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<UIThreadExtensionFunction> delete_function(function); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUpExtensionFunction(function); 528a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool result = extension_function_test_utils::RunFunction( 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function, args, browser(), GetFlags()); 530a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!result) { 531a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) LOG(ERROR) << function->GetError(); 532a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 533a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return result; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_function_test_utils::RunFunctionFlags GetFlags() { 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return current_browser()->profile()->IsOffTheRecord() ? 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_function_test_utils::INCLUDE_INCOGNITO : 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_function_test_utils::NONE; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension_function_test_utils::RunFunction*() only uses browser for its 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile(), so pass it the on-record browser so that it always uses the 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on-record profile to match real-life behavior. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Value* RunFunctionAndReturnResult( 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<UIThreadExtensionFunction> function, 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& args) { 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpExtensionFunction(function.get()); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_function_test_utils::RunFunctionAndReturnSingleResult( 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function.get(), args, browser(), GetFlags()); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string RunFunctionAndReturnError( 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<UIThreadExtensionFunction> function, 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& args) { 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpExtensionFunction(function.get()); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_function_test_utils::RunFunctionAndReturnError( 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function.get(), args, browser(), GetFlags()); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool RunFunctionAndReturnString( 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<UIThreadExtensionFunction> function, 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& args, 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* result_string) { 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpExtensionFunction(function.get()); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult(function, args)); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(result.get()); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result.get() && result->GetAsString(result_string); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string DownloadItemIdAsArgList(const DownloadItem* download_item) { 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("[%d]", download_item->GetId()); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& downloads_directory() { 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return downloads_directory_.path(); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadsEventsListener* events_listener() { return events_listener_.get(); } 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetUpExtensionFunction(UIThreadExtensionFunction* function) { 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_) { 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreate the tab each time for insulation. 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = chrome::AddSelectedTabWithURL( 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser(), 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_->GetResourceURL("empty.html"), 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function->set_extension(extension_); 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function->SetRenderViewHost(tab->GetRenderViewHost()); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateAndSetDownloadsDirectory() { 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(downloads_directory_.CreateUniqueTempDir()); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser()->profile()->GetPrefs()->SetFilePath( 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kDownloadDefaultDirectory, 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) downloads_directory_.path()); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir downloads_directory_; 603cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const Extension* extension_; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* incognito_browser_; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* current_browser_; 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadsEventsListener> events_listener_; 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadExtensionTest); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockIconExtractorImpl : public DownloadFileIconExtractor { 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockIconExtractorImpl(const base::FilePath& path, 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IconLoader::IconSize icon_size, 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& response) 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : expected_path_(path), 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_icon_size_(icon_size), 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response_(response) { 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockIconExtractorImpl() {} 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool ExtractIconURLForPath(const base::FilePath& path, 6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float scale, 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconLoader::IconSize icon_size, 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconURLCallback callback) OVERRIDE { 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(expected_path_.value().c_str(), path.value().c_str()); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_icon_size_, icon_size); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected_path_ == path && 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_icon_size_ == icon_size) { 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_ = callback; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockIconExtractorImpl::RunCallback, 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunCallback() { 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_.Run(response_); 644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Drop the reference on extension function to avoid memory leaks. 645f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback_ = IconURLCallback(); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_path_; 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconLoader::IconSize expected_icon_size_; 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string response_; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconURLCallback callback_; 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ItemNotInProgress(DownloadItem* item) { 65590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return item->GetState() != DownloadItem::IN_PROGRESS; 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cancels the underlying DownloadItem when the ScopedCancellingItem goes out of 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// scope. Like a scoped_ptr, but for DownloadItems. 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedCancellingItem { 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ScopedCancellingItem(DownloadItem* item) : item_(item) {} 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ScopedCancellingItem() { 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item_->Cancel(true); 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::DownloadUpdatedObserver observer( 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) item_, base::Bind(&ItemNotInProgress)); 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer.WaitForEvent(); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* get() { return item_; } 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item_; 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedCancellingItem); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cancels all the underlying DownloadItems when the ScopedItemVectorCanceller 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// goes out of scope. Generalization of ScopedCancellingItem to many 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DownloadItems. 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedItemVectorCanceller { 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ScopedItemVectorCanceller(DownloadManager::DownloadVector* items) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : items_(items) { 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ScopedItemVectorCanceller() { 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DownloadManager::DownloadVector::const_iterator item = items_->begin(); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item != items_->end(); ++item) { 68690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if ((*item)->GetState() == DownloadItem::IN_PROGRESS) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*item)->Cancel(true); 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::DownloadUpdatedObserver observer( 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (*item), base::Bind(&ItemNotInProgress)); 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer.WaitForEvent(); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector* items_; 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedItemVectorCanceller); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Writes an HTML5 file so that it can be downloaded. 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HTML5FileWriter { 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 70203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) static bool CreateFileForTesting(storage::FileSystemContext* context, 70303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemURL& path, 70403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const char* data, 705a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int length) { 706a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Create a temp file. 707a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::FilePath temp_file; 708a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!base::CreateTemporaryFile(&temp_file) || 709a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WriteFile(temp_file, data, length) != length) { 710a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 711a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 712a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Invoke the fileapi to copy it into the sandboxed filesystem. 713a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool result = false; 714a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::WaitableEvent done_event(true, false); 715a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserThread::PostTask( 716a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 717a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&CreateFileForTestingOnIOThread, 718a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(context), 719a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) path, temp_file, 720a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(&result), 721a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(&done_event))); 722a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Wait for that to finish. 723a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) done_event.Wait(); 724a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::DeleteFile(temp_file, false); 725a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return result; 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 729a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static void CopyInCompletion(bool* result, 730a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::WaitableEvent* done_event, 7315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Error error) { 732effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 7335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *result = error == base::File::FILE_OK; 734a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) done_event->Signal(); 735a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 736a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 737a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static void CreateFileForTestingOnIOThread( 73803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::FileSystemContext* context, 73903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemURL& path, 740a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const base::FilePath& temp_file, 741a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool* result, 742a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::WaitableEvent* done_event) { 743effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 744a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) context->operation_runner()->CopyInForeignFile( 745a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) temp_file, path, 746a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&CopyInCompletion, 747a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(result), 748a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(done_event))); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(benjhayden) Merge this with the other TestObservers. 753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class JustInProgressDownloadObserver 754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public content::DownloadTestObserverInProgress { 755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 756c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JustInProgressDownloadObserver( 757c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadManager* download_manager, size_t wait_count) 758c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : content::DownloadTestObserverInProgress(download_manager, wait_count) { 759c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 760c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 761c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~JustInProgressDownloadObserver() {} 762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool IsDownloadInFinalState(DownloadItem* item) OVERRIDE { 765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return item->GetState() == DownloadItem::IN_PROGRESS; 766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(JustInProgressDownloadObserver); 769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool ItemIsInterrupted(DownloadItem* item) { 77290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return item->GetState() == DownloadItem::INTERRUPTED; 773c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 774c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 775558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochcontent::DownloadInterruptReason InterruptReasonExtensionToContent( 7765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::InterruptReason error) { 777558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch switch (error) { 7785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case downloads::INTERRUPT_REASON_NONE: 779558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return content::DOWNLOAD_INTERRUPT_REASON_NONE; 7805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define INTERRUPT_REASON(name, value) \ 7815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case downloads::INTERRUPT_REASON_##name: \ 7825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::DOWNLOAD_INTERRUPT_REASON_##name; 783558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "content/public/browser/download_interrupt_reason_values.h" 784558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#undef INTERRUPT_REASON 785558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 786558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NOTREACHED(); 787558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return content::DOWNLOAD_INTERRUPT_REASON_NONE; 788558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 789558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 7905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liudownloads::InterruptReason InterruptReasonContentToExtension( 791558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DownloadInterruptReason error) { 792558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch switch (error) { 793558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch case content::DOWNLOAD_INTERRUPT_REASON_NONE: 7945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return downloads::INTERRUPT_REASON_NONE; 7955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define INTERRUPT_REASON(name, value) \ 7965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case content::DOWNLOAD_INTERRUPT_REASON_##name: \ 7975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return downloads::INTERRUPT_REASON_##name; 798558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "content/public/browser/download_interrupt_reason_values.h" 799558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#undef INTERRUPT_REASON 800558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 801558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NOTREACHED(); 8025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return downloads::INTERRUPT_REASON_NONE; 803558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 804558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS) 8085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// http://crbug.com/396510 8095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_Open DISABLED_DownloadExtensionTest_Open 8105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 8115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_Open DownloadExtensionTest_Open 8125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 8145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MAYBE_DownloadExtensionTest_Open) { 815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadExtension("downloads_split"); 81623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DownloadsOpenFunction* open_function = new DownloadsOpenFunction(); 81723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function->set_user_gesture(true); 818558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunFunctionAndReturnError( 82023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function, 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[-42]").c_str()); 8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* download_item = CreateSlowTestDownload(); 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(download_item); 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(download_item->GetOpened()); 8262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(download_item->GetOpenWhenComplete()); 8275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 8285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 8295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 8305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 8315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"application/octet-stream\"," 8325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 8335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 8345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_item->GetURL().spec().c_str()))); 83523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function = new DownloadsOpenFunction(); 83623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function->set_user_gesture(true); 837558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotComplete, 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunFunctionAndReturnError( 83923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function, 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItemIdAsArgList(download_item)).c_str()); 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FinishPendingSlowDownloads(); 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(download_item->GetOpened()); 84423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 84523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function = new DownloadsOpenFunction(); 84623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_STREQ(errors::kUserGesture, 84723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) RunFunctionAndReturnError( 84823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function, 84923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DownloadItemIdAsArgList(download_item)).c_str()); 85023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(download_item->GetOpened()); 85123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 85223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function = new DownloadsOpenFunction(); 85323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function->set_user_gesture(true); 85423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(RunFunction(open_function, 8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(download_item->GetOpened()); 8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 8602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_PauseResumeCancelErase) { 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* download_item = CreateSlowTestDownload(); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(download_item); 863f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string error; 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call pause(). It should succeed and the download should be paused on 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return. 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(download_item->IsPaused()); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 871f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling removeFile on a non-active download yields kNotComplete 872f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // and should not crash. http://crbug.com/319984 873f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsRemoveFileFunction(), 874f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DownloadItemIdAsArgList(download_item)); 875f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_STREQ(errors::kNotComplete, error.c_str()); 876f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calling pause() twice shouldn't be an error. 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(download_item->IsPaused()); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now try resuming this download. It should succeed. 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(download_item->IsPaused()); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resume again. Resuming a download that wasn't paused is not an error. 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(download_item->IsPaused()); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pause again. 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(download_item->IsPaused()); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And now cancel. 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 90090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancel again. Shouldn't have any effect. 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 90590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 907f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling paused on a non-active download yields kNotInProgress. 908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error = RunFunctionAndReturnError( 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsPauseFunction(), DownloadItemIdAsArgList(download_item)); 910558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotInProgress, error.c_str()); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 912f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling resume on a non-active download yields kNotResumable 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsResumeFunction(), DownloadItemIdAsArgList(download_item)); 915558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotResumable, error.c_str()); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 917f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling pause on a non-existent download yields kInvalidId. 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsPauseFunction(), "[-42]"); 920558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, error.c_str()); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 922558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Calling resume on a non-existent download yields kInvalidId 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsResumeFunction(), "[-42]"); 925558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, error.c_str()); 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 927f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling removeFile on a non-existent download yields kInvalidId. 928f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error = RunFunctionAndReturnError( 929f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new DownloadsRemoveFileFunction(), "[-42]"); 930f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_STREQ(errors::kInvalidId, error.c_str()); 931f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id = download_item->GetId(); 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsEraseFunction(), 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringPrintf("[{\"id\": %d}]", id))); 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadManager::DownloadVector items; 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCurrentManager()->GetAllDownloads(&items); 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0UL, items.size()); 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result); 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_item = NULL; 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ListValue* result_list = NULL; 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int element = -1; 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result_list->GetInteger(0, &element)); 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(id, element); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<UIThreadExtensionFunction> MockedGetFileIconFunction( 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& expected_path, 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconLoader::IconSize icon_size, 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& response) { 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<DownloadsGetFileIconFunction> function( 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsGetFileIconFunction()); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function->SetIconExtractorForTesting(new MockIconExtractorImpl( 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_path, icon_size, response)); 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return function; 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test downloads.getFileIcon() on in-progress, finished, cancelled and deleted 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// download items. 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_FileIcon_Active) { 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* download_item = CreateSlowTestDownload(); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(download_item); 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(download_item->GetTargetFilePath().empty()); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string args32(base::StringPrintf("[%d, {\"size\": 32}]", 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetId())); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result_string; 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the icon for the in-progress download. This call should succeed even 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the file type isn't registered. 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test whether the correct path is being pased into the icon extractor. 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {}]", download_item->GetId()), &result_string)); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now try a 16x16 icon. 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::SMALL, "foo"), 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {\"size\": 16}]", download_item->GetId()), 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result_string)); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Explicitly asking for 32x32 should give us a 32x32 icon. 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32, &result_string)); 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Finish the download and try again. 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishPendingSlowDownloads(); 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(DownloadItem::COMPLETE, download_item->GetState()); 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32, &result_string)); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the path passed to the icon extractor post-completion. 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32, &result_string)); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now create another download. 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item = CreateSlowTestDownload(); 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(download_item); 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(download_item->GetTargetFilePath().empty()); 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) args32 = base::StringPrintf("[%d, {\"size\": 32}]", download_item->GetId()); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancel the download. As long as the download has a target path, we should 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be able to query the file icon. 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->Cancel(true); 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(download_item->GetTargetFilePath().empty()); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let cleanup complete on the FILE thread. 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(BrowserThread::FILE); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the path passed to the icon extractor post-cancellation. 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32, 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result_string)); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate an error during icon load by invoking the mock with an empty 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // result string. 1021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error = RunFunctionAndReturnError( 1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockedGetFileIconFunction(download_item->GetTargetFilePath(), 1023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IconLoader::NORMAL, 1024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32); 1026558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kIconNotFound, error.c_str()); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1028558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Once the download item is deleted, we should return kInvalidId. 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = download_item->GetId(); 1030868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) download_item->Remove(); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item = NULL; 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(static_cast<DownloadItem*>(NULL), 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCurrentManager()->GetDownload(id)); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsGetFileIconFunction(), args32); 1035558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can acquire file icons for history downloads regardless of 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// whether they exist or not. If the file doesn't exist we should receive a 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// generic icon from the OS/toolkit that may or may not be specific to the file 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// type. 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_FileIcon_History) { 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("real.txt"), 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("fake.txt"), 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector all_downloads; 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &all_downloads)); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1057b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::FilePath real_path = all_downloads[0]->GetTargetFilePath(); 1058b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::FilePath fake_path = all_downloads[1]->GetTargetFilePath(); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1060a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, base::WriteFile(real_path, "", 0)); 10617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(real_path)); 10627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(fake_path)); 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DownloadManager::DownloadVector::iterator iter = all_downloads.begin(); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != all_downloads.end(); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter) { 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result_string; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a MockIconExtractorImpl to test if the correct path is being passed 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // into the DownloadFileIconExtractor. 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 1071b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) (*iter)->GetTargetFilePath(), IconLoader::NORMAL, "hello"), 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {\"size\": 32}]", (*iter)->GetId()), 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result_string)); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("hello", result_string.c_str()); 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test passing the empty query to search(). 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchEmptyQuery) { 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem item(CreateSlowTestDownload()); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item.get()); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{}]")); 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |filenameRegex| parameter for search(). 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchFilenameRegex) { 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("foobar"), 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector all_downloads; 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &all_downloads)); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"filenameRegex\": \"foobar\"}]")); 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item_value = NULL; 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int item_id = -1; 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item_value->GetInteger("id", &item_id)); 11177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(all_downloads[0]->GetId(), static_cast<uint32>(item_id)); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |id| parameter for search(). 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, DownloadExtensionTest_SearchId) { 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSlowTestDownloads(2, &items); 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedItemVectorCanceller delete_items(&items); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 11277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new DownloadsSearchFunction(), base::StringPrintf( 11287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "[{\"id\": %u}]", items[0]->GetId()))); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item_value = NULL; 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int item_id = -1; 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item_value->GetInteger("id", &item_id)); 11377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(items[0]->GetId(), static_cast<uint32>(item_id)); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test specifying both the |id| and |filename| parameters for search(). 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchIdAndFilename) { 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSlowTestDownloads(2, &items); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedItemVectorCanceller delete_items(&items); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"id\": 0, \"filename\": \"foobar\"}]")); 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0UL, result_list->GetSize()); 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test a single |orderBy| parameter for search(). 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchOrderBy) { 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("zzz"), 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &items)); 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1172558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new DownloadsSearchFunction(), "[{\"orderBy\": [\"filename\"]}]")); 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, result_list->GetSize()); 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item0_value = NULL; 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item1_value = NULL; 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string item0_name, item1_name; 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item1_value->GetString("filename", &item1_name)); 1184b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_GT(items[0]->GetTargetFilePath().value(), 1185b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) items[1]->GetTargetFilePath().value()); 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_LT(item0_name, item1_name); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test specifying an empty |orderBy| parameter for search(). 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchOrderByEmpty) { 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("zzz"), 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &items)); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1205558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new DownloadsSearchFunction(), "[{\"orderBy\": []}]")); 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, result_list->GetSize()); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item0_value = NULL; 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item1_value = NULL; 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string item0_name, item1_name; 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item1_value->GetString("filename", &item1_name)); 1217b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_GT(items[0]->GetTargetFilePath().value(), 1218b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) items[1]->GetTargetFilePath().value()); 12190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // The order of results when orderBy is empty is unspecified. When there are 12200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // no sorters, DownloadQuery does not call sort(), so the order of the results 12210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // depends on the order of the items in base::hash_map<uint32,...> 12220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // DownloadManagerImpl::downloads_, which is unspecified and differs between 12230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // libc++ and libstdc++. http://crbug.com/365334 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |danger| option for search(). 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchDanger) { 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("zzz"), 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &items)); 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"danger\": \"content\"}]")); 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |state| option for search(). 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchState) { 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSlowTestDownloads(2, &items); 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedItemVectorCanceller delete_items(&items); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items[0]->Cancel(true); 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"state\": \"in_progress\"}]")); 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |limit| option for search(). 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchLimit) { 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSlowTestDownloads(2, &items); 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedItemVectorCanceller delete_items(&items); 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"limit\": 1}]")); 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test invalid search parameters. 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchInvalid) { 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error = RunFunctionAndReturnError( 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"filenameRegex\": \"(\"}]"); 1286558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilter, 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 1289558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new DownloadsSearchFunction(), "[{\"orderBy\": [\"goat\"]}]"); 1290558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidOrderBy, 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"limit\": -1}]"); 1294558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidQueryLimit, 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test searching using multiple conditions through multiple downloads. 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchPlural) { 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("aaa"), 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::CANCELLED, 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("zzz"), 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &items)); 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{" 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"state\": \"complete\", " 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"danger\": \"content\", " 1320558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch "\"orderBy\": [\"filename\"], " 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"limit\": 1}]")); 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item_value = NULL; 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); 13282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::StringType item_name; 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item_value->GetString("filename", &item_name)); 1330b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_EQ(items[2]->GetTargetFilePath().value(), item_name); 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that incognito downloads are only visible in incognito contexts, and 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test that on-record downloads are visible in both incognito and on-record 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// contexts, for DownloadsSearchFunction, DownloadsPauseFunction, 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DownloadsResumeFunction, and DownloadsCancelFunction. 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito) { 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result_value; 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* result_dict = NULL; 13422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::StringType filename; 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_incognito = false; 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string on_item_arg; 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string off_item_arg; 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result_string; 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up one on-record item and one off-record item. 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up the off-record item first because otherwise there are mysteriously 3 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // items total instead of 2. 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(benjhayden): Figure out where the third item comes from. 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOffTheRecord(); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* off_item = CreateSlowTestDownload(); 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(off_item); 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) off_item_arg = DownloadItemIdAsArgList(off_item); 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* on_item = CreateSlowTestDownload(); 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(on_item); 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) on_item_arg = DownloadItemIdAsArgList(on_item); 1362b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_TRUE(on_item->GetTargetFilePath() != off_item->GetTargetFilePath()); 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extensions running in the incognito window should have access to both 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // items because the Test extension is in spanning mode. 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOffTheRecord(); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_value.reset(RunFunctionAndReturnResult( 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{}]")); 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_value.get()); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_value->GetAsList(&result_list)); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, result_list->GetSize()); 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &result_dict)); 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetString("filename", &filename)); 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); 1375b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_TRUE(on_item->GetTargetFilePath() == base::FilePath(filename)); 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_incognito); 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(1, &result_dict)); 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetString("filename", &filename)); 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); 1380b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_TRUE(off_item->GetTargetFilePath() == base::FilePath(filename)); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_incognito); 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extensions running in the on-record window should have access only to the 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on-record item. 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_value.reset(RunFunctionAndReturnResult( 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{}]")); 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_value.get()); 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_value->GetAsList(&result_list)); 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &result_dict)); 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetString("filename", &filename)); 1393b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_TRUE(on_item->GetTargetFilePath() == base::FilePath(filename)); 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_incognito); 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pausing/Resuming the off-record item while on the record should return an 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // error. Cancelling "non-existent" downloads is not an error. 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsPauseFunction(), off_item_arg); 1400558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsResumeFunction(), 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) off_item_arg); 1404558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsGetFileIconFunction(), 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {}]", off_item->GetId())); 1409558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOffTheRecord(); 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do the FileIcon test for both the on- and off-items while off the record. 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE(benjhayden): This does not include the FileIcon test from history, 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just active downloads. This shouldn't be a problem. 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) on_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {}]", on_item->GetId()), &result_string)); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) off_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {}]", off_item->GetId()), &result_string)); 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do the pause/resume/cancel test for both the on- and off-items while off 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the record. 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(on_item->IsPaused()); 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(on_item->IsPaused()); 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), on_item_arg)); 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(on_item->IsPaused()); 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), on_item_arg)); 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(on_item->IsPaused()); 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(on_item->IsPaused()); 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); 143790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); 143990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsPauseFunction(), on_item_arg); 1441558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotInProgress, error.c_str()); 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsResumeFunction(), on_item_arg); 1443558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotResumable, error.c_str()); 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(off_item->IsPaused()); 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(off_item->IsPaused()); 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(off_item->IsPaused()); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(off_item->IsPaused()); 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(off_item->IsPaused()); 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); 145590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); 145790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); 1458558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch error = RunFunctionAndReturnError(new DownloadsPauseFunction(), off_item_arg); 1459558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotInProgress, error.c_str()); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsResumeFunction(), 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) off_item_arg); 1462558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotResumable, error.c_str()); 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can start a download and that the correct sequence of events is 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fired for it. 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Basic) { 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1470eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1471eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 14885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 14895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 14905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 14915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 14925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 14935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 14945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 14955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 14965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 14975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 14985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 14995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 15005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 15015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 15025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 15035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 15045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 15055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 15065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 15075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 15085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 15095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can start a download from an incognito context, and that the 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// download knows that it's incognito. 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Incognito) { 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1517eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1518eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOffTheRecord(); 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 15355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 15365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 15375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 15385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 15395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 15405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 15415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 15425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 15435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 15445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\":%d," 15455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 15465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 15475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 15485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 15495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 15505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 15515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 15525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\":%d," 15535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 15545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"," 15555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"}}]", 15565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN) 15605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This test is very flaky on Win. http://crbug.com/248438 1561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_DownloadExtensionTest_Download_UnsafeHeaders \ 1562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISABLED_DownloadExtensionTest_Download_UnsafeHeaders 1563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 1564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_DownloadExtensionTest_Download_UnsafeHeaders \ 1565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DownloadExtensionTest_Download_UnsafeHeaders 1566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 1567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we disallow certain headers case-insensitively. 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1570868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MAYBE_DownloadExtensionTest_Download_UnsafeHeaders) { 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1572eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1573eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kUnsafeHeaders[] = { 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Accept-chArsEt", 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "accept-eNcoding", 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "coNNection", 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "coNteNt-leNgth", 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cooKIE", 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cOOkie2", 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "coNteNt-traNsfer-eNcodiNg", 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dAtE", 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ExpEcT", 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "hOsT", 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "kEEp-aLivE", 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rEfErEr", 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "tE", 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "trAilER", 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "trANsfer-eNcodiNg", 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "upGRAde", 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "usER-agENt", 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "viA", 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pRoxY-", 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "sEc-", 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pRoxY-probably-not-evil", 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "sEc-probably-not-evil", 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oRiGiN", 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Access-Control-Request-Headers", 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Access-Control-Request-Method", 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t index = 0; index < arraysize(kUnsafeHeaders); ++index) { 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 1606558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidHeader, 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFunctionAndReturnError(new DownloadsDownloadFunction(), 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf( 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"unsafe-header-%d.txt\"," 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"headers\": [{" 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"name\": \"%s\"," 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"value\": \"unsafe\"}]}]", 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str(), 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<int>(index), 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUnsafeHeaders[index])).c_str()); 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1620558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) 1621558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#define MAYBE_DownloadExtensionTest_Download_Subdirectory\ 1622558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DISABLED_DownloadExtensionTest_Download_Subdirectory 1623558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#else 1624558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#define MAYBE_DownloadExtensionTest_Download_Subdirectory\ 1625558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DownloadExtensionTest_Download_Subdirectory 1626558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1628558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch MAYBE_DownloadExtensionTest_Download_Subdirectory) { 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1636558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 1637558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch "[{\"url\": \"%s\"," 1638558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"filename\": \"sub/dir/ect/ory.txt\"}]", 1639558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 1640558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(result.get()); 1641558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int result_id = -1; 1642558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 1643558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 1644558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(item); 1645558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ScopedCancellingItem canceller(item); 1646558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 1647558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 16485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 16495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 16505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 16515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 16525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 16535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 16545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 16555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 16565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 16575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 16585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 16595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 16605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 16615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 16625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 16635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("sub/dir/ect/ory.txt").c_str()))); 16645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 16655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 16665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 16675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 16685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 16695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 16705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that invalid filenames are disallowed. 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_InvalidFilename) { 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1678eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1682558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFunctionAndReturnError(new DownloadsDownloadFunction(), 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf( 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"../../../../../etc/passwd\"}]", 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str())).c_str()); 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// flaky on mac: crbug.com/392288 1691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX) 1692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_DownloadExtensionTest_Download_InvalidURLs \ 1693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISABLED_DownloadExtensionTest_Download_InvalidURLs 1694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_DownloadExtensionTest_Download_InvalidURLs \ 1696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DownloadExtensionTest_Download_InvalidURLs 1697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that downloading invalid URLs immediately returns kInvalidURLError. 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MAYBE_DownloadExtensionTest_Download_InvalidURLs) { 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kInvalidURLs[] = { 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "foo bar", 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "../hello", 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "/hello", 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://", 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "#frag", 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "foo/bar.html#frag", 1712558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch "google.com/", 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) { 1716558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidURL, 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFunctionAndReturnError(new DownloadsDownloadFunction(), 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf( 171958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str()) 172058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch << kInvalidURLs[index]; 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 172258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 17235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ("NETWORK_INVALID_REQUEST", RunFunctionAndReturnError( 1724bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch new DownloadsDownloadFunction(), 1725bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]").c_str()); 17265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ("NETWORK_INVALID_REQUEST", RunFunctionAndReturnError( 1727bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch new DownloadsDownloadFunction(), 1728bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch "[{\"url\": \"javascript:return false;\"}]").c_str()); 17295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ("NETWORK_FAILED", RunFunctionAndReturnError( 1730bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch new DownloadsDownloadFunction(), 1731bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch "[{\"url\": \"ftp://example.com/example.txt\"}]").c_str()); 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// permissions, test downloading from ftp. 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Valid URLs plus fragments are still valid URLs. 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_URLFragment) { 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1741eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1742eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0#fragment").spec(); 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 17585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 17595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 17605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 17615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 17625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 17635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 17645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 17655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 17665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 17675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 17685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 17695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 17705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 17715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 17725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 17735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 17745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 17755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 17765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 17775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 17785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 17795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// conflictAction may be specified without filename. 17830529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 17840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadExtensionTest_Download_ConflictAction) { 17850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static char kFilename[] = "download.txt"; 17860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoadExtension("downloads_split"); 17870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string download_url = "data:text/plain,hello"; 17880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GoOnTheRecord(); 17890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 17900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 17910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 17920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "[{\"url\": \"%s\"}]", download_url.c_str()))); 17930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result.get()); 17940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int result_id = -1; 17950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 17960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 17970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item); 17980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedCancellingItem canceller(item); 17990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 18000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 18015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 18025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 18045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 18055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 18065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 18075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 18085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 18095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 18135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 18145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 18155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 18165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename(kFilename).c_str()))); 18175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 18215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 18225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 18235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 18240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 18250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result.reset(RunFunctionAndReturnResult( 18260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 18270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "[{\"url\": \"%s\", \"conflictAction\": \"overwrite\"}]", 18280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch download_url.c_str()))); 18290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result.get()); 18300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result_id = -1; 18310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 18320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch item = GetCurrentManager()->GetDownload(result_id); 18330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item); 18340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedCancellingItem canceller2(item); 18350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 18360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 18375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 18385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 18405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 18415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 18425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 18435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 18445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 18455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 18495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 18505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 18515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 18525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename(kFilename).c_str()))); 18535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 18575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 18585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 18595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 18600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 18610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Valid data URLs are valid URLs. 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_DataURL) { 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = "data:text/plain,hello"; 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"data.txt\"}]", download_url.c_str()))); 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 18825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 18845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 18855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 18865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 18875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 18885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 18895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 18935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 18945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 18955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 18965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("data.txt").c_str()))); 18975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 19005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 19015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 19025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 19035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Valid file URLs are valid URLs. 19075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN) 19082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Disabled due to crbug.com/175711 19092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_Download_File \ 19102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISABLED_DownloadExtensionTest_Download_File 19112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 19122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_Download_File \ 19132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_Download_File 19142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 19162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_DownloadExtensionTest_Download_File) { 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = "file:///"; 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url += "C:/"; 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"file.txt\"}]", download_url.c_str()))); 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 19375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 19385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"incognito\": false," 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"mime\": \"text/html\"," 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"paused\": false," 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"url\": \"%s\"}]", 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 19445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 19455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 19465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": {" 1948b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) " \"previous\": \"\"," 1949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"%s\"}}]", 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_id, 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFilename("file.txt").c_str()))); 19525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 19535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 19545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 1955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"state\": {" 1956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"previous\": \"in_progress\"," 1957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"complete\"}}]", 1958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that auth-basic-succeed would fail if the resource requires the 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Authorization header and chrome fails to propagate it back to the server. 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests both that testserver.py does not succeed when it should fail as 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// well as how the downloads extension API exposes the failure to extensions. 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_AuthBasic_Fail) { 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1968eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1969eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("auth-basic").spec(); 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"auth-basic-fail.txt\"}]", 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1986558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(WaitForInterruption( 1987558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch item, 19885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::DOWNLOAD_INTERRUPT_REASON_SERVER_UNAUTHORIZED, 1989558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::StringPrintf("[{\"danger\": \"safe\"," 1990558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"incognito\": false," 1991558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"mime\": \"text/html\"," 1992558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"paused\": false," 1993558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"url\": \"%s\"}]", 1994558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that DownloadsDownloadFunction propagates |headers| to the URLRequest. 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Headers) { 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2001eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2002eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/downloads/" 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_headers=Foo:bar&expected_headers=Qx:yo").spec(); 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"headers-succeed.txt\"," 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"headers\": [" 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {\"name\": \"Foo\", \"value\": \"bar\"}," 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {\"name\": \"Qx\", \"value\":\"yo\"}]}]", 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 20245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 20255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 20265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 20275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"application/octet-stream\"," 20285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 20295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 20305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 20315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 20325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 20335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 20345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 20355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 20365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 20375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 20385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("headers-succeed.txt").c_str()))); 20395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 20405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 20415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 20425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 20435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 20445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 20455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that headers-succeed would fail if the resource requires the headers and 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chrome fails to propagate them back to the server. This tests both that 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// testserver.py does not succeed when it should fail as well as how the 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// downloads extension api exposes the failure to extensions. 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Headers_Fail) { 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2055eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2056eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/downloads/" 20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_headers=Foo:bar&expected_headers=Qx:yo").spec(); 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"headers-fail.txt\"}]", 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2074558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(WaitForInterruption( 2075558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch item, 2076558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2077558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::StringPrintf("[{\"danger\": \"safe\"," 2078558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"incognito\": false," 20795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " \"bytesReceived\": 0.0," 20805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " \"fileSize\": 0.0," 2081558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"mime\": \"\"," 2082558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"paused\": false," 2083558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"url\": \"%s\"}]", 2084558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that DownloadsDownloadFunction propagates the Authorization header 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// correctly. 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_AuthBasic) { 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2092eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2093eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("auth-basic").spec(); 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is just base64 of 'username:secret'. 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kAuthorization = "dXNlcm5hbWU6c2VjcmV0"; 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"auth-basic-succeed.txt\"," 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"headers\": [{" 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"name\": \"Authorization\"," 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"value\": \"Basic %s\"}]}]", 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str(), kAuthorization))); 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 21165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 21185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 21195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"bytesReceived\": 0.0," 21205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"fileSize\": 0.0," 21215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/html\"," 21225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 21235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 21245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 21255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 21265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 21285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 21295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 21305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 21315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that DownloadsDownloadFunction propagates the |method| and |body| 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// parameters to the URLRequest. 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Post) { 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/post/downloads/" 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_body=BODY").spec(); 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"post-succeed.txt\"," 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"method\": \"POST\"," 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"body\": \"BODY\"}]", 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 21615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 21635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 21645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"application/octet-stream\"," 21655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 21665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 21675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 21685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 21695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 21715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 21725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 21735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 21745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 21755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("post-succeed.txt").c_str()))); 21765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 21775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 21795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 21805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 21815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 21825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that downloadPostSuccess would fail if the resource requires the POST 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// method, and chrome fails to propagate the |method| parameter back to the 21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server. This tests both that testserver.py does not succeed when it should 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fail, and this tests how the downloads extension api exposes the failure to 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extensions. 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Post_Get) { 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/post/downloads/" 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_body=BODY").spec(); 21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"body\": \"BODY\"," 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"post-get.txt\"}]", 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2213558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(WaitForInterruption( 2214558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch item, 2215558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2216558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::StringPrintf("[{\"danger\": \"safe\"," 2217558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"incognito\": false," 2218558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"mime\": \"\"," 2219558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"paused\": false," 2220558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"id\": %d," 2221558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"url\": \"%s\"}]", 2222558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch result_id, 2223558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that downloadPostSuccess would fail if the resource requires the POST 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// method, and chrome fails to propagate the |body| parameter back to the 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server. This tests both that testserver.py does not succeed when it should 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fail, and this tests how the downloads extension api exposes the failure to 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extensions. 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Post_NoBody) { 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/post/downloads/" 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_body=BODY").spec(); 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"method\": \"POST\"," 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"post-nobody.txt\"}]", 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2254558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(WaitForInterruption( 2255558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch item, 2256558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2257558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::StringPrintf("[{\"danger\": \"safe\"," 2258558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"incognito\": false," 2259558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"mime\": \"\"," 2260558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"paused\": false," 2261558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"id\": %d," 2262558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"url\": \"%s\"}]", 2263558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch result_id, 2264558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that cancel()ing an in-progress download causes its state to transition 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to interrupted, and test that that state transition is detectable by an 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// onChanged event listener. TODO(benjhayden): Test other sources of 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interruptions such as server death. 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Cancel) { 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL( 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "download-known-size").spec(); 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 22925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 22935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"incognito\": false," 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"mime\": \"application/octet-stream\"," 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"paused\": false," 22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"id\": %d," 22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"url\": \"%s\"}]", 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_id, 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item->Cancel(true); 23025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 23035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 2305558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"error\": {\"current\":\"USER_CANCELED\"}," 23065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"state\": {" 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"previous\": \"in_progress\"," 23085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"current\": \"interrupted\"}}]", 23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_id))); 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// flaky on mac: crbug.com/392288 2313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX) 2314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_DownloadExtensionTest_Download_FileSystemURL \ 2315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISABLED_DownloadExtensionTest_Download_FileSystemURL 2316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_DownloadExtensionTest_Download_FileSystemURL \ 2318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DownloadExtensionTest_Download_FileSystemURL 2319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test downloading filesystem: URLs. 23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: chrome disallows creating HTML5 FileSystem Files in incognito. 23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MAYBE_DownloadExtensionTest_Download_FileSystemURL) { 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kPayloadData = "on the record\ndata"; 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 23275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2329a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string download_url = "filesystem:" + GetExtensionURL() + 23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "temporary/on_record.txt"; 2331a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2332a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Setup a file in the filesystem which we can download. 2333a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(HTML5FileWriter::CreateFileForTesting( 233403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) BrowserContext::GetDefaultStoragePartition(browser()->profile()) 233503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ->GetFileSystemContext(), 233603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::FileSystemURL::CreateForTest(GURL(download_url)), 233703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) kPayloadData, 233803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) strlen(kPayloadData))); 2339a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2340a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Now download it. 23415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 23435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 23445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 23455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 23465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 23475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 23495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 23515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 23545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 23565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"incognito\": false," 23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"mime\": \"text/plain\"," 23585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"paused\": false," 23595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"url\": \"%s\"}]", 23605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 23615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 23625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": {" 2365b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) " \"previous\": \"\"," 2366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"%s\"}}]", 23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_id, 23685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFilename("on_record.txt").c_str()))); 23695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 23705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 2372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"state\": {" 2373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"previous\": \"in_progress\"," 2374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"complete\"}}]", 2375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string disk_data; 237758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(base::ReadFileToString(item->GetTargetFilePath(), &disk_data)); 23785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(kPayloadData, disk_data.c_str()); 23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2382010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_NoChange) { 23832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 23842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 23852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2386eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2387eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 23882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 23892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 23912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 23922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 23932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 23942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 23952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 23962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 23972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 23982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 23992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 24002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 24012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 24035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 24045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 24055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 24062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 24072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 24082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 24092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 24102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 24112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 24122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 24135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 24145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 24155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 24165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 24175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 24182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 241990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 24202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 24222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 24232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 24242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 24252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 24262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 24272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 24282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), 24295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 24302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 24312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 24322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 24345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 24355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 24365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 24375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 24385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 24395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 24405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 24415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 24425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 24435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 24445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 24455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 24465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 24475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 24485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 24492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 24502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2451010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Disabled due to cross-platform flakes; http://crbug.com/370531. 2452010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 2453010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadExtensionTest, 2454010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DISABLED_DownloadExtensionTest_OnDeterminingFilename_Timeout) { 2455010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GoOnTheRecord(); 2456010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LoadExtension("downloads_split"); 2457010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AddFilenameDeterminer(); 2458010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 2459010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 2460010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 2461010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2462010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ExtensionDownloadsEventRouter::SetDetermineFilenameTimeoutSecondsForTesting( 2463010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0); 2464010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2465010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Start downloading a file. 2466010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 2467010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 2468010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 2469010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(result.get()); 2470010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int result_id = -1; 2471010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 2472010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2473010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(item); 2474010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScopedCancellingItem canceller(item); 2475010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2476010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2477010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 2478010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 2479010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"danger\": \"safe\"," 2480010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"incognito\": false," 2481010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"id\": %d," 2482010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"mime\": \"text/plain\"," 2483010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"paused\": false," 2484010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"url\": \"%s\"}]", 2485010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2486010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) download_url.c_str()))); 2487010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor( 2488010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) downloads::OnDeterminingFilename::kEventName, 2489010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2490010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"filename\":\"slow.txt\"}]", 2491010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id))); 2492010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 2493010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2494010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2495010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Do not respond to the onDeterminingFilename. 2496010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2497010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The download should complete successfully. 2498010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 2499010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2500010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"filename\": {" 2501010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"previous\": \"\"," 2502010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"current\": \"%s\"}}]", 2503010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2504010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetFilename("slow.txt").c_str()))); 2505010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 2506010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2507010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"state\": {" 2508010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"previous\": \"in_progress\"," 2509010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"current\": \"complete\"}}]", 2510010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id))); 2511010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 2512010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2513010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2514010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_Twice) { 2515010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GoOnTheRecord(); 2516010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LoadExtension("downloads_split"); 2517010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AddFilenameDeterminer(); 2518010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 2519010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 2520010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 2521010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2522010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Start downloading a file. 2523010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 2524010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 2525010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 2526010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(result.get()); 2527010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int result_id = -1; 2528010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 2529010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2530010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(item); 2531010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScopedCancellingItem canceller(item); 2532010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2533010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2534010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 2535010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 2536010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"danger\": \"safe\"," 2537010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"incognito\": false," 2538010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"id\": %d," 2539010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"mime\": \"text/plain\"," 2540010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"paused\": false," 2541010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"url\": \"%s\"}]", 2542010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2543010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) download_url.c_str()))); 2544010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor( 2545010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) downloads::OnDeterminingFilename::kEventName, 2546010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2547010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"filename\":\"slow.txt\"}]", 2548010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id))); 2549010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 2550010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2551010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2552010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Respond to the onDeterminingFilename. 2553010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string error; 2554010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 2555010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) browser()->profile(), 2556010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 2557010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetExtensionId(), 2558010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2559010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath(), 2560010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2561010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &error)); 2562010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ("", error); 2563010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2564010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Calling DetermineFilename again should return an error instead of calling 2565010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // DownloadTargetDeterminer. 2566010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2567010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) browser()->profile(), 2568010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 2569010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetExtensionId(), 2570010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2571010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("different")), 2572010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 2573010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &error)); 2574010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(errors::kTooManyListeners, error); 2575010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2576010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The download should complete successfully. 2577010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 2578010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2579010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"filename\": {" 2580010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"previous\": \"\"," 2581010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"current\": \"%s\"}}]", 2582010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2583010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetFilename("slow.txt").c_str()))); 2584010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 2585010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2586010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"state\": {" 2587010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"previous\": \"in_progress\"," 2588010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"current\": \"complete\"}}]", 2589010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id))); 2590010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 2591010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 25922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 25932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 25942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_DangerousOverride) { 25952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 25962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 25972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2598eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2599eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 26002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 26012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 26032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 26042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 26052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 26062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 26072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 26082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 26092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 26102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 26112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 26122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 26132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 26155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 26172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 26182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 26192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 26202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 26212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 26222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 26232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 26245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 26255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 26285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 26292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 263090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 26312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 26332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 26342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 26352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 26362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 26372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 26382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 26392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("overridden.swf")), 26405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 26412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 26422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 26432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 26455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"danger\": {" 26485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\":\"safe\"," 26495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\":\"file\"}}]", 26505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 26512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2652868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item->ValidateDangerousDownload(); 26535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 26545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"danger\": {" 26575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\":\"file\"," 26585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\":\"accepted\"}}]", 26595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 26605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 26615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"state\": {" 26642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"previous\": \"in_progress\"," 26652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"current\": \"complete\"}}]", 2666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 2667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(downloads_directory().AppendASCII("overridden.swf"), 2668b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) item->GetTargetFilePath()); 26692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 26702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 26722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 26732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_ReferencesParentInvalid) { 26742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 26752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 26762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2678eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 26792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 26802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 26822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 26832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 26842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 26852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 26862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 26872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 26882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 26892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 26902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 26912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 26922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 26945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 26962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 26972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 26982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 26992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 27002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 27012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 27022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 27035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 27045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 27065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 27075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 27082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 270990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 27102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 27122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 27132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 27142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 27152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 27162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 27172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 27182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("sneaky/../../sneaky.txt")), 27195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 27202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 2721558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 27225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 27235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 27252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"filename\": {" 2726b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) " \"previous\": \"\"," 2727c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"%s\"}}]", 27282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 27292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetFilename("slow.txt").c_str()))); 27305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 27315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 2733c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"state\": {" 2734c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"previous\": \"in_progress\"," 2735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"complete\"}}]", 2736c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 27372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 27382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 27402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 2741c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_IllegalFilename) { 27422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 27432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 27442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2745eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2746eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 27472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 27482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 27502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 27512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 27522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 27532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 27542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 27552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 27562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 27572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 27582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 27592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 27602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 27625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 27642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 27652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 27662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 27672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 27682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 27692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 27702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 27715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 27725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 27745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 27755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 27762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 277790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 27782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 27802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 27812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 27822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 27832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 27842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 27852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 2786c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("<")), 27875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 27882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 2789558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 27905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 27915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 27935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 27945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 27955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 27965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 27975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 27985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 27995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 28015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 28025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 28035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 28045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 28052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 28062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 28082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 2809c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_IllegalFilenameExtension) { 28102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 28112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 28122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2813eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2814eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 28152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 28162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 28182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 28192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 28202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 28212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 28222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 28232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 28242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 28252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 28262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 28272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 28282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 28305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 28322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 28332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 28342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 28352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 28362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 28372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 28382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 28395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 28405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 28425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 28435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 28442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 284590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 28462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 28482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 28492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 28502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 28512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 28522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 28532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 2854c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL( 2855c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}/foo")), 28565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 28572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 2858558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 28595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 28605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 28625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 28635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 28645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 28655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 28665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 28675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 28685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 28705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 28715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 28725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 28735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 28742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 28754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) 28764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_ReservedFilename\ 28774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISABLED_DownloadExtensionTest_OnDeterminingFilename_ReservedFilename 28784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 28794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_ReservedFilename\ 28804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_ReservedFilename 28814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 28822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 28832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 28844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MAYBE_DownloadExtensionTest_OnDeterminingFilename_ReservedFilename) { 28852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 28862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 28872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2888eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2889eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 28902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 28912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 28932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 28942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 28952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 28962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 28972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 28982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 28992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 29002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 29012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 29022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 29032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 29055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 29072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 29082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 29092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 29102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 29112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 29122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 29132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 29145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 29155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 29185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 29192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 292090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 29212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2922c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. 29232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 29242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 29252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 29262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 29272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 29282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 2929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("con.foo")), 29305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 29312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 2932558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 29335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 29345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 29375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 29385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 29395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 29405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 29415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 29425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 29455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 29465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 29475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 2948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 2951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest, 2952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_CurDirInvalid) { 2953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GoOnTheRecord(); 2954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadExtension("downloads_split"); 2955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddFilenameDeterminer(); 2956eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2957eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 2958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 2959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2960c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Start downloading a file. 2961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 2962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 2963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 2964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result.get()); 2965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int result_id = -1; 2966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 2967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item); 2969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedCancellingItem canceller(item); 2970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 29735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 2975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"incognito\": false," 2976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"id\": %d," 2977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"mime\": \"text/plain\"," 2978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"paused\": false," 2979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"url\": \"%s\"}]", 2980c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id, 2981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) download_url.c_str()))); 29825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 29835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 29865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 2987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 298890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 29892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. 2991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error; 2992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->profile(), 2994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 2995c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExtensionId(), 2996c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id, 2997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL(".")), 29985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 3000558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 30015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 30025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 30055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 30065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 30075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 30085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 30095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 30105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 30135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 30145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 30155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 3016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 3017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 3019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest, 3020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_ParentDirInvalid) { 3021eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3022eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 3023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GoOnTheRecord(); 3024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadExtension("downloads_split"); 3025c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddFilenameDeterminer(); 3026c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 3027c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3028c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Start downloading a file. 3029c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 3030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 3031c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 3032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result.get()); 3033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int result_id = -1; 3034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 3035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 3036c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item); 3037c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedCancellingItem canceller(item); 3038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 3039c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 30415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 3043c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"incognito\": false," 3044c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"id\": %d," 3045c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"mime\": \"text/plain\"," 3046c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"paused\": false," 3047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"url\": \"%s\"}]", 30482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 3049c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) download_url.c_str()))); 30505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 30515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 30545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 3055c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 305690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3057c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3058c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. 3059c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error; 3060c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 3061c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->profile(), 3062c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 3063c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExtensionId(), 3064c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id, 3065c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("..")), 30665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3067c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 3068558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 30695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 30705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 30735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 30745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 30755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 30765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 30775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 30785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 30815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 30825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 30835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 30842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 30852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 30872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 3088c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_AbsPathInvalid) { 30892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 30902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 30912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 3092eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3093eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 30942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 30952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 30972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 30982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 30992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 31002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 31012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 31022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 31032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 31042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 31052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 31062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 31072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 31095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 31112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 31122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 31132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 31142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 31152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 31162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 31172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 31185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 31195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 31215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 31225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 31232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 312490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 31252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. Absolute paths should be rejected. 31272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 31282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 31292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 31302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 31312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 31322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 3133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) downloads_directory().Append(FILE_PATH_LITERAL("sneaky.txt")), 31345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 31352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 3136558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 31372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 31395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 31412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"filename\": {" 3142b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) " \"previous\": \"\"," 3143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"%s\"}}]", 31442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 31452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetFilename("slow.txt").c_str()))); 31465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 31475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 3149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"state\": {" 3150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"previous\": \"in_progress\"," 3151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"complete\"}}]", 3152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 31532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 31542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 31562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 3157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_EmptyBasenameInvalid) { 31582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 31592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 31602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 3161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 31632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 31642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 31662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 31672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 31682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 31692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 31702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 31712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 31722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 31732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 31742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 31752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 3176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 31785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 31802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 31812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 31822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 31832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 31842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 31852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 31862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 31875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 31885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 31905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 31915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 31922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 319390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 31942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. Empty basenames should be rejected. 3196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error; 3197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 3198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->profile(), 3199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 3200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExtensionId(), 3201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id, 3202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("foo/")), 32035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 3205558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 3206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 32085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 32115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 32125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 32135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 32145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 32155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 32165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 32195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 32205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 32215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 32220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 32230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// conflictAction may be specified without filename. 32250529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F( 32260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadExtensionTest, 32270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadExtensionTest_OnDeterminingFilename_Overwrite) { 32280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GoOnTheRecord(); 32290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoadExtension("downloads_split"); 32300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AddFilenameDeterminer(); 32310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 32320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(test_server()->Start()); 32330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string download_url = test_server()->GetURL("slow?0").spec(); 32340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Start downloading a file. 32360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 32370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 32380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "[{\"url\": \"%s\"}]", download_url.c_str()))); 32390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result.get()); 32400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int result_id = -1; 32410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 32420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 32430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item); 32440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedCancellingItem canceller(item); 32450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 32465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 32475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 32495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 32505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 32515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 32525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 32535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 32545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 32555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 32565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 32575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 32605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 32610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item->GetTargetFilePath().empty()); 32620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 32630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Respond to the onDeterminingFilename. 32650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string error; 32660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 32670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch browser()->profile(), 32680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch false, 32690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId(), 32700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result_id, 32710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::FilePath(), 32725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 32730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch &error)); 32740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ("", error); 32750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 32775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 32805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 32815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 32825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 32835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 32845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 32855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 32885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 32895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 32905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 32910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Start downloading a file. 32930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result.reset(RunFunctionAndReturnResult( 32940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 32950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "[{\"url\": \"%s\"}]", download_url.c_str()))); 32960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result.get()); 32970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result_id = -1; 32980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 32990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch item = GetCurrentManager()->GetDownload(result_id); 33000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item); 33010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedCancellingItem canceller2(item); 33020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 33030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 33045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 33055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 33075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 33085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 33095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 33105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 33115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 33125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 33135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 33145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 33155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 33185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 33190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item->GetTargetFilePath().empty()); 33200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 33210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 33220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Respond to the onDeterminingFilename. 33230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Also test that DetermineFilename allows (chrome) extensions to set 33240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // filenames without (filename) extensions. (Don't ask about v8 extensions or 33250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // python extensions or kernel extensions or firefox extensions...) 33260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch error = ""; 33270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 33280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch browser()->profile(), 33290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch false, 33300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId(), 33310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result_id, 33320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::FilePath(), 33335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 33340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch &error)); 33350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ("", error); 33360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 33375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 33385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 33415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 33425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 33435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 33445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 33455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 33465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 33495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 33505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 33515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 3352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 3353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 3355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest, 3356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_Override) { 3357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GoOnTheRecord(); 3358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadExtension("downloads_split"); 3359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddFilenameDeterminer(); 3360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 3362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 3363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Start downloading a file. 3365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 3366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 3367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 3368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result.get()); 3369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int result_id = -1; 3370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 3371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 3372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item); 3373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedCancellingItem canceller(item); 3374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 33755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 33765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 33785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 33795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 33805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 33815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 33825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 33835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 33845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 33855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 33865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 33895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 3390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 339190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 33942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 33952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 33962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 33972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 33982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 33992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 34002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), 34015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 34022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 34032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 34042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 34065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 34095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 34105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 34115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 34125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 34135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 34145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 34175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 34185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 34195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 34202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 34222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.reset(RunFunctionAndReturnResult( 34232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 34242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 34252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 34262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id = -1; 34272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 34282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) item = GetCurrentManager()->GetDownload(result_id); 34292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 34302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller2(item); 34312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 34322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 34345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 34365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 34375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 34385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 34395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 34405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 34415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 34425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 34435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 34445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 34475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 34482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 344990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 34502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 34522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Also test that DetermineFilename allows (chrome) extensions to set 34532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // filenames without (filename) extensions. (Don't ask about v8 extensions or 34542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // python extensions or kernel extensions or firefox extensions...) 34552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error = ""; 34562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 34572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 34582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 34592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 34602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 34612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("foo")), 34625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 34632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 34642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 34652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 34675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 34705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 34715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 34725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 34735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("foo").c_str()))); 34745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 34755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 34785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 34795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 34805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 34812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 34822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO test precedence rules: install_time 34842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX) 3486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_RemoveFilenameDeterminer \ 3487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISABLED_DownloadExtensionTest_OnDeterminingFilename_RemoveFilenameDeterminer 3488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 3489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_RemoveFilenameDeterminer \ 3490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DownloadExtensionTest_OnDeterminingFilename_RemoveFilenameDeterminer 3491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 34922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 34932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 3494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MAYBE_DownloadExtensionTest_OnDeterminingFilename_RemoveFilenameDeterminer) { 3495eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3496eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 34972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 34982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 34992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderProcessHost* host = AddFilenameDeterminer(); 35002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 35012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 35032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 35042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 35052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 35062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 35072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 35082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 35092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 35102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 35112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 35122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 35132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 35155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 35172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 35182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 35192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 35202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 35212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 35222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 35232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 35245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 35255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 35275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 35285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 35292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 353090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 35312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove a determiner while waiting for it. 35332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveFilenameDeterminer(host); 35342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 35365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 35385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 35395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 35405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 35415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 35422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 35432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 35452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 35462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_IncognitoSplit) { 35472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 3548eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3549eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 35502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 35512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 35532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 35542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOffTheRecord(); 35562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 35572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start an on-record download. 35592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 35602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 35612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 35622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 35632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 35642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 35652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 35662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 35672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 35682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 35692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 35702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 35725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 35735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 35752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 35762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 35772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 35782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 35792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 35802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 35812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 35825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 35835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 35855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 35865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 35875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 35882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 358990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 35902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename events. 35922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 35932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 35942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 35952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 35962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 35972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 35982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("42.txt")), 35995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 36002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 36012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 36022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 36045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 36055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 36085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 36095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 36105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 36115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("42.txt").c_str()))); 36125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 36135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 36165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 36175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 36185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 36192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start an incognito download for comparison. 36212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOffTheRecord(); 36222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.reset(RunFunctionAndReturnResult( 36232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 36242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 36252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 36262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id = -1; 36272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 36282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) item = GetCurrentManager()->GetDownload(result_id); 36292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 36302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller2(item); 36312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 36322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 36345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 36365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 36375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 36385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 36395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 36405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 36415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 36425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 36432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // On-Record renderers should not see events for off-record items. 36445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 36455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 36485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 36495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 36502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 365190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 36522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 36542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error = ""; 36552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 36562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 36572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 36582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 36592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 36602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("5.txt")), 36615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 36622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 36632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 36642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 36665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 36675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 36705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 36715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 36725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 36735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("5.txt").c_str()))); 36745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 36755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 36785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 36795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 36805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 36812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 36822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 36842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 36852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_IncognitoSpanning) { 36862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_spanning"); 3687eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3688eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 36892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 36902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 36922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 36932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // There is a single extension renderer that sees both on-record and 36952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // off-record events. The extension functions see the on-record profile with 36962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // include_incognito=true. 36972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start an on-record download. 36992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 37002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 37012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 37022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 37032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 37042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 37052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 37062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 37072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 37082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 37092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 37102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 37125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 37135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 37152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 37162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 37172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 37182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 37192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 37202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 37212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 37225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 37235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 37265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 37275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 37282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 372990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 37302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename events. 37322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 37332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 37342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 37352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, 37362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 37372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 37382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("42.txt")), 37395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 37402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 37412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 37422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 37445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 37455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 37485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 37495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 37505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 37515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("42.txt").c_str()))); 37525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 37535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 37565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 37575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 37585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 37592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start an incognito download for comparison. 37612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOffTheRecord(); 37622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.reset(RunFunctionAndReturnResult( 37632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 37642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 37652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 37662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id = -1; 37672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 37682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) item = GetCurrentManager()->GetDownload(result_id); 37692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 37702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller2(item); 37712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 37722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 37745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 37765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 37775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 37785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 37795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 37805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 37815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 37825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 37835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 37845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 37875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 37885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 37892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 379090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 37912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 37932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error = ""; 37942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 37952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 37962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, 37972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 37982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 37992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("42.txt")), 38005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 38012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 38022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 38032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 38055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 38065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 38075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 38085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 38095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 38105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 38115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 38125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("42 (1).txt").c_str()))); 38135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 38145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 38155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 38165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 38175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 38185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 38195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 38202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 38212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38225e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#if defined(OS_WIN) 38235e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)// This test is very flaky on Win XP and Aura. http://crbug.com/248438 38245e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume \ 38255e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) DISABLED_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume 38265e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#else 38275e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume \ 38285e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_InterruptedResume 38295e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#endif 38305e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) 3831c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test download interruption while extensions determining filename. Should not 3832c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// re-dispatch onDeterminingFilename. 38332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 38342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 38355e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume) { 3836c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 3837c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switches::kEnableDownloadResumption); 38382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 3839eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3840eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 38412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 3842a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::RenderProcessHost* host = AddFilenameDeterminer(); 38432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start a download. 3845c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadItem* item = NULL; 3846c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 3847c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadManager* manager = GetCurrentManager(); 3848c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 3849c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new JustInProgressDownloadObserver(manager, 1)); 3850c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(0, manager->InProgressCount()); 38518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_EQ(0, manager->NonMaliciousInProgressCount()); 3852c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Tabs created just for a download are automatically closed, invalidating 3853c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the download's WebContents. Downloads without WebContents cannot be 3854c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // resumed. http://crbug.com/225901 3855c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 3856c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) current_browser(), 3857c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl), 3858c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CURRENT_TAB, 3859c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::BROWSER_TEST_NONE); 3860c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer->WaitForFinished(); 3861c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::IN_PROGRESS)); 3862c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadManager::DownloadVector items; 3863c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manager->GetAllDownloads(&items); 3864c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (DownloadManager::DownloadVector::iterator iter = items.begin(); 3865c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter != items.end(); ++iter) { 3866c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if ((*iter)->GetState() == DownloadItem::IN_PROGRESS) { 3867c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There should be only one IN_PROGRESS item. 3868c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(NULL, item); 3869c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) item = *iter; 3870c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 3871c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 3872c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item); 3873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 38742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 38752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename event. 38775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 38785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 38795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 38805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 38815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 38825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"application/octet-stream\"," 38835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false}]", 38845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 38855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 38865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 38875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 38885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 38895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"download-unknown-size\"}]", 38905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 38912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 389290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 38932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3894c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClearEvents(); 3895c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 3896c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) current_browser(), 3897c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(URLRequestSlowDownloadJob::kErrorDownloadUrl), 3898c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NEW_BACKGROUND_TAB, 3899c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 39002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3901c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Errors caught before filename determination are delayed until after 3902c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // filename determination. 39032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 39042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 39052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 39062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 39072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 3908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) item->GetId(), 39092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("42.txt")), 39105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 39115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu &error)) 39125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu << error; 39132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 39145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 39155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 39165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 39175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 39185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 39195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 39205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId(), 39215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("42.txt").c_str()))); 39222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3923c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::DownloadUpdatedObserver interrupted(item, base::Bind( 3924c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ItemIsInterrupted)); 3925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(interrupted.WaitForEvent()); 39265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 39275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 39285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 39295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"error\":{\"current\":\"NETWORK_FAILED\"}," 39305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\":{" 39315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\":\"in_progress\"," 39325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\":\"interrupted\"}}]", 39335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 3934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClearEvents(); 3936a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Downloads that are restarted on resumption trigger another download target 3937a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // determination. 3938a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) RemoveFilenameDeterminer(host); 3939a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) item->Resume(); 3940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Errors caught before filename determination is complete are delayed until 3942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // after filename determination so that, on resumption, filename determination 3943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // does not need to be re-done. So, there will not be a second 3944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onDeterminingFilename event. 3945c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 39475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 39485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 39495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"error\":{\"previous\":\"NETWORK_FAILED\"}," 39505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\":{" 39515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\":\"interrupted\"," 39525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\":\"in_progress\"}}]", 39535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 3954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClearEvents(); 3956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FinishPendingSlowDownloads(); 3957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 39595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 39605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 39615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 39625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 39635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 39645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 39655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 39662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 39672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3968a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 3969a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DownloadExtensionTest_SetShelfEnabled) { 3970a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) LoadExtension("downloads_split"); 3971a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsSetShelfEnabledFunction(), "[false]")); 3972a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(DownloadServiceFactory::GetForBrowserContext( 3973a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser()->profile())->IsShelfEnabled()); 3974a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsSetShelfEnabledFunction(), "[true]")); 3975a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(DownloadServiceFactory::GetForBrowserContext( 3976a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser()->profile())->IsShelfEnabled()); 3977a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test that existing shelves are hidden. 3978a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test multiple extensions. 3979a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test disabling extensions. 3980a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test that browsers associated with other profiles are not 3981a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // affected. 3982a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test incognito. 3983a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 3984a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 39852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(benjhayden) Figure out why DisableExtension() does not fire 39862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OnListenerRemoved. 3987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(benjhayden) Test that the shelf is shown for download() both with and 3989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// without a WebContents. 3990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3991424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void OnDangerPromptCreated(DownloadDangerPrompt* prompt) { 3992424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) prompt->InvokeActionForTesting(DownloadDangerPrompt::ACCEPT); 3993424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 3994424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 39955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_MACOSX) 39965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Flakily triggers and assert on Mac. 39975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// http://crbug.com/180759 39985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MAYBE_DownloadExtensionTest_AcceptDanger DownloadExtensionTest_AcceptDanger 39995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 40005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MAYBE_DownloadExtensionTest_AcceptDanger DISABLED_DownloadExtensionTest_AcceptDanger 40015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 4002424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 40035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MAYBE_DownloadExtensionTest_AcceptDanger) { 4004424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Download a file that will be marked dangerous; click the browser action 4005424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // button; the browser action poup will call acceptDanger(); when the 4006424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // DownloadDangerPrompt is created, pretend that the user clicks the Accept 4007424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // button; wait until the download completes. 4008424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) LoadExtension("downloads_split"); 4009424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 4010424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new DownloadsDownloadFunction(), 4011424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[{\"url\": \"data:,\", \"filename\": \"dangerous.swf\"}]")); 4012424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(result.get()); 4013424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int result_id = -1; 4014424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 4015424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 4016424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(item); 40175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 40185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 40195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d, " 40205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"danger\": {" 40215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"safe\"," 40225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"file\"}}]", 40235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 4024424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(item->IsDangerous()); 4025424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ScopedCancellingItem canceller(item); 4026424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 4027424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new content::DownloadTestObserverTerminal( 4028424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) GetCurrentManager(), 1, 4029424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_IGNORE)); 4030424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DownloadsAcceptDangerFunction::OnPromptCreatedCallback callback = 4031424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Bind(&OnDangerPromptCreated); 4032424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DownloadsAcceptDangerFunction::OnPromptCreatedForTesting( 4033424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) &callback); 4034424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) BrowserActionTestUtil(browser()).Press(0); 4035424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) observer->WaitForFinished(); 4036424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 4037424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 4038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DownloadsApiTest : public ExtensionApiTest { 4039c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 4040c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadsApiTest() {} 4041c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~DownloadsApiTest() {} 4042c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 4043c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadsApiTest); 4044c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 4045c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4046c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadsApiTest, DownloadsApiTest) { 4048c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunExtensionTest("downloads")) << message_; 4049c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 4050558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 4051558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST(DownloadInterruptReasonEnumsSynced, 4052558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DownloadInterruptReasonEnumsSynced) { 40535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define INTERRUPT_REASON(name, value) \ 40545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(InterruptReasonContentToExtension( \ 40555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::DOWNLOAD_INTERRUPT_REASON_##name), \ 40565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::INTERRUPT_REASON_##name); \ 40575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ( \ 40585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu InterruptReasonExtensionToContent(downloads::INTERRUPT_REASON_##name), \ 4059558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_##name); 4060558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "content/public/browser/download_interrupt_reason_values.h" 4061558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#undef INTERRUPT_REASON 4062558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 4063ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4064ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochTEST(ExtensionDetermineDownloadFilenameInternal, 4065ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionDetermineDownloadFilenameInternal) { 4066ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string winner_id; 4067ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FilePath filename; 40685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FilenameConflictAction conflict_action = 40695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY; 4070cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtensionWarningSet warnings; 4071ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4072ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Empty incumbent determiner 4073ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.clear(); 4074ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionDownloadsEventRouter::DetermineFilenameInternal( 4075ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FilePath(FILE_PATH_LITERAL("a")), 40765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 4077ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "suggester", 4078ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now(), 4079ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 4080ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time(), 4081ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &winner_id, 4082ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &filename, 4083ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &conflict_action, 4084ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &warnings); 4085ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("suggester", winner_id); 4086ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ(FILE_PATH_LITERAL("a"), filename.value()); 40875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, conflict_action); 4088ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(warnings.empty()); 4089ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4090ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Incumbent wins 4091ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.clear(); 4092ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionDownloadsEventRouter::DetermineFilenameInternal( 4093ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FilePath(FILE_PATH_LITERAL("b")), 40945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_PROMPT, 4095ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "suggester", 4096ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now() - base::TimeDelta::FromDays(1), 4097ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "incumbent", 4098ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now(), 4099ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &winner_id, 4100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &filename, 4101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &conflict_action, 4102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &warnings); 4103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("incumbent", winner_id); 4104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ(FILE_PATH_LITERAL("a"), filename.value()); 41055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, conflict_action); 4106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_FALSE(warnings.empty()); 4107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(ExtensionWarning::kDownloadFilenameConflict, 4108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.begin()->warning_type()); 4109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("suggester", warnings.begin()->extension_id()); 4110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Suggester wins 4112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.clear(); 4113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionDownloadsEventRouter::DetermineFilenameInternal( 4114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FilePath(FILE_PATH_LITERAL("b")), 41155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_PROMPT, 4116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "suggester", 4117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now(), 4118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "incumbent", 4119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now() - base::TimeDelta::FromDays(1), 4120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &winner_id, 4121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &filename, 4122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &conflict_action, 4123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &warnings); 4124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("suggester", winner_id); 4125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ(FILE_PATH_LITERAL("b"), filename.value()); 41265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(downloads::FILENAME_CONFLICT_ACTION_PROMPT, conflict_action); 4127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_FALSE(warnings.empty()); 4128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(ExtensionWarning::kDownloadFilenameConflict, 4129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.begin()->warning_type()); 4130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("incumbent", warnings.begin()->extension_id()); 4131ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 4132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace extensions 41345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // http://crbug.com/3061144 4136