downloads_api_browsertest.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_file_icon_extractor.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service_factory.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/download/download_test_file_activity_observer.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/downloads/downloads_api.h" 24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/extensions/browser_action_test_util.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_function_test_utils.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/download_row.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/url_request_mock_util.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_item.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/common/content_switches.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/download_test_observer.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/test/net/url_request_slow_download_job.h" 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/browser/event_router.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) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DownloadsEventsListener() { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Remove(this, chrome::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STLDeleteElements(&events_); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClearEvents() { 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) STLDeleteElements(&events_); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) events_.clear(); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Event { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Event(Profile* profile, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& event_name, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& json_args, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time caught) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : profile_(profile), 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_name_(event_name), 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) json_args_(json_args), 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args_(base::JSONReader::Read(json_args)), 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) caught_(caught) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& caught() { return caught_; } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool Satisfies(const Event& other) const { 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return other.SatisfiedBy(*this); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool SatisfiedBy(const Event& other) const { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((profile_ != other.profile_) || 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (event_name_ != other.event_name_)) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (((event_name_ == downloads::OnDeterminingFilename::kEventName) || 1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu (event_name_ == downloads::OnCreated::kEventName) || 1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu (event_name_ == downloads::OnChanged::kEventName)) && 1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu args_.get() && other.args_.get()) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* left_list = NULL; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* left_dict = NULL; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* right_list = NULL; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* right_dict = NULL; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!args_->GetAsList(&left_list) || 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !other.args_->GetAsList(&right_list) || 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !left_list->GetDictionary(0, &left_dict) || 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !right_list->GetDictionary(0, &right_dict)) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (base::DictionaryValue::Iterator iter(*left_dict); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !iter.IsAtEnd(); iter.Advance()) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value* right_value = NULL; 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!right_dict->HasKey(iter.key()) || 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) (right_dict->Get(iter.key(), &right_value) && 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !iter.value().Equals(right_value))) { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else if ((event_name_ == downloads::OnErased::kEventName) && 1455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu args_.get() && other.args_.get()) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int my_id = -1, other_id = -1; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (args_->GetAsInteger(&my_id) && 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) other.args_->GetAsInteger(&other_id) && 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) my_id == other_id); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return json_args_ == other.json_args_; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string Debug() { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("Event(%p, %s, %s, %f)", 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_name_.c_str(), 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) json_args_.c_str(), 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) caught_.ToJsTime()); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string event_name_; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string json_args_; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> args_; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time caught_; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Event); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef ExtensionDownloadsEventRouter::DownloadsNotificationSource 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadsNotificationSource; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Observe(int type, 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationSource& source, 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT: 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadsNotificationSource* dns = 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<DownloadsNotificationSource>(source).ptr(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Event* new_event = new Event( 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns->profile, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns->event_name, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *content::Details<std::string>(details).ptr(), base::Time::Now()); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) events_.push_back(new_event); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (waiting_ && 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_for_.get() && 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new_event->Satisfies(*waiting_for_)) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = false; 19290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI::current()->Quit(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitFor(Profile* profile, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& event_name, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& json_args) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_for_.reset(new Event(profile, event_name, json_args, base::Time())); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::deque<Event*>::const_iterator iter = events_.begin(); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != events_.end(); ++iter) { 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if ((*iter)->Satisfies(*waiting_for_.get())) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = true; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success = !waiting_; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (waiting_) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Print the events that were caught since the last WaitFor() call to help 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // find the erroneous event. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(benjhayden) Fuzzy-match and highlight the erroneous event. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::deque<Event*>::const_iterator iter = events_.begin(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != events_.end(); ++iter) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*iter)->caught() > last_wait_) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Caught " << (*iter)->Debug(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (waiting_for_.get()) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Timed out waiting for " << waiting_for_->Debug(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = false; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_for_.reset(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_wait_ = base::Time::Now(); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return success; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool waiting_; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_wait_; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Event> waiting_for_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::deque<Event*> events_; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadsEventsListener); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadExtensionTest : public ExtensionApiTest { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest() 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : extension_(NULL), 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_browser_(NULL), 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser_(NULL) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used with CreateHistoryDownloads 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct HistoryDownloadInfo { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filename to use. CreateHistoryDownloads will append this filename to the 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // temporary downloads directory specified by downloads_directory(). 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath::CharType* filename; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // State for the download. Note that IN_PROGRESS downloads will be created 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as CANCELLED. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::DownloadState state; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Danger type for the download. Only use DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT. 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadDangerType danger_type; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadExtension(const char* name) { 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Store the created Extension object so that we can attach it to 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunctions. Also load the extension in incognito profiles for 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing incognito. 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = LoadExtensionIncognito(test_data_dir_.AppendASCII(name)); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(extension_); 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WebContents* tab = chrome::AddSelectedTabWithURL( 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) current_browser(), 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_->GetResourceURL("empty.html"), 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::PAGE_TRANSITION_LINK); 278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile()) 2795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ->AddEventListener(downloads::OnCreated::kEventName, 2800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch tab->GetRenderProcessHost(), 2810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId()); 282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile()) 2835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ->AddEventListener(downloads::OnChanged::kEventName, 2840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch tab->GetRenderProcessHost(), 2850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId()); 286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile()) 2875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ->AddEventListener(downloads::OnErased::kEventName, 2880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch tab->GetRenderProcessHost(), 2890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderProcessHost* AddFilenameDeterminer() { 293010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ExtensionDownloadsEventRouter::SetDetermineFilenameTimeoutSecondsForTesting( 294010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = chrome::AddSelectedTabWithURL( 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser(), 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_->GetResourceURL("empty.html"), 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::PAGE_TRANSITION_LINK); 299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile()) 3005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ->AddEventListener(downloads::OnDeterminingFilename::kEventName, 3015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu tab->GetRenderProcessHost(), 3025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetExtensionId()); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return tab->GetRenderProcessHost(); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveFilenameDeterminer(content::RenderProcessHost* host) { 307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventRouter::Get(current_browser()->profile())->RemoveEventListener( 308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) downloads::OnDeterminingFilename::kEventName, host, GetExtensionId()); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* current_browser() { return current_browser_; } 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InProcessBrowserTest 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionApiTest::SetUpOnMainThread(); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InProcessBrowserTest::SetUpOnMainThread(); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateAndSetDownloadsDirectory(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser()->profile()->GetPrefs()->SetBoolean( 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kPromptForDownload, false); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOnRecordManager()->RemoveAllDownloads(); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) events_listener_.reset(new DownloadsEventsListener()); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable file chooser for current profile. 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadTestFileActivityObserver observer(current_browser()->profile()); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.EnableFileChooser(false); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GoOnTheRecord() { current_browser_ = browser(); } 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GoOffTheRecord() { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!incognito_browser_) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_browser_ = CreateIncognitoBrowser(); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOffRecordManager()->RemoveAllDownloads(); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable file chooser for incognito profile. 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadTestFileActivityObserver observer(incognito_browser_->profile()); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.EnableFileChooser(false); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser_ = incognito_browser_; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WaitFor(const std::string& event_name, const std::string& json_args) { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return events_listener_->WaitFor( 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser()->profile(), event_name, json_args); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 349558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool WaitForInterruption( 350558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DownloadItem* item, 351558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DownloadInterruptReason expected_error, 352558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const std::string& on_created_event) { 3535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!WaitFor(downloads::OnCreated::kEventName, on_created_event)) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now, onCreated is always fired before interruption. 3565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return WaitFor( 3575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::OnChanged::kEventName, 3585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 3595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 3605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"error\": {\"current\": \"%s\"}," 3615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 3625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 3635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"interrupted\"}}]", 3645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId(), 3655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::DownloadInterruptReasonToString(expected_error).c_str())); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClearEvents() { 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) events_listener_->ClearEvents(); 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetExtensionURL() { 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_->url().spec(); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetExtensionId() { 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return extension_->id(); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetFilename(const char* path) { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result = 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) downloads_directory_.path().AppendASCII(path).AsUTF8Unsafe(); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::string::size_type next = result.find("\\"); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next != std::string::npos; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next = result.find("\\", next)) { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result.replace(next, 1, "\\\\"); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next += 2; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager* GetOnRecordManager() { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BrowserContext::GetDownloadManager(browser()->profile()); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager* GetOffRecordManager() { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BrowserContext::GetDownloadManager( 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile()); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager* GetCurrentManager() { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (current_browser_ == incognito_browser_) ? 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOffRecordManager() : GetOnRecordManager(); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a set of history downloads based on the provided |history_info| 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // array. |count| is the number of elements in |history_info|. On success, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |items| will contain |count| DownloadItems in the order that they were 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified in |history_info|. Returns true on success and false otherwise. 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CreateHistoryDownloads(const HistoryDownloadInfo* history_info, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t count, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector* items) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadIdComparator download_id_comparator; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time current = base::Time::Now(); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) items->clear(); 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetOnRecordManager()->GetAllDownloads(items); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK_EQ(0, static_cast<int>(items->size())); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<GURL> url_chain; 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url_chain.push_back(GURL()); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < count; ++i) { 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetOnRecordManager()->CreateDownloadItem( 4217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::DownloadItem::kInvalidId + 1 + i, 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) downloads_directory().Append(history_info[i].filename), 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) downloads_directory().Append(history_info[i].filename), 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url_chain, GURL(), // URL Chain, referrer 425f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string(), std::string(), // mime_type, original_mime_type 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current, current, // start_time, end_time 427ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(), std::string(), // etag, last_modified 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, 1, // received_bytes, total_bytes 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_info[i].state, // state 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::DOWNLOAD_INTERRUPT_REASON_NONE, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); // opened 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) items->push_back(item); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Order by ID so that they are in the order that we created them. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::sort(items->begin(), items->end(), download_id_comparator); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the danger type if necessary. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < count; ++i) { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (history_info[i].danger_type != 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS) { 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_info[i].danger_type); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items->at(i)->OnContentCheckCompleted(history_info[i].danger_type); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateSlowTestDownloads( 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t count, DownloadManager::DownloadVector* items) { 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < count; ++i) { 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateInProgressDownloadObserver(1)); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL slow_download_url(URLRequestSlowDownloadJob::kUnknownSizeUrl); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser(), slow_download_url, CURRENT_TAB, 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->WaitForFinished(); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1u, observer->NumDownloadsSeenInState(DownloadItem::IN_PROGRESS)); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCurrentManager()->GetAllDownloads(items); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(count, items->size()); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* CreateSlowTestDownload() { 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateInProgressDownloadObserver(1)); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL slow_download_url(URLRequestSlowDownloadJob::kUnknownSizeUrl); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager* manager = GetCurrentManager(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(0, manager->NonMaliciousInProgressCount()); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, manager->InProgressCount()); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager->InProgressCount() != 0) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser(), slow_download_url, CURRENT_TAB, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->WaitForFinished(); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::IN_PROGRESS)); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager->GetAllDownloads(&items); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* new_item = NULL; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DownloadManager::DownloadVector::iterator iter = items.begin(); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != items.end(); ++iter) { 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*iter)->GetState() == DownloadItem::IN_PROGRESS) { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be only one IN_PROGRESS item. 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, new_item); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_item = *iter; 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new_item; 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FinishPendingSlowDownloads() { 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateDownloadObserver(1)); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL finish_url(URLRequestSlowDownloadJob::kFinishDownloadUrl); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser(), finish_url, NEW_FOREGROUND_TAB, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->WaitForFinished(); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadTestObserver* CreateDownloadObserver(size_t download_count) { 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new content::DownloadTestObserverTerminal( 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCurrentManager(), download_count, 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadTestObserver* CreateInProgressDownloadObserver( 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t download_count) { 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new content::DownloadTestObserverInProgress( 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCurrentManager(), download_count); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool RunFunction(UIThreadExtensionFunction* function, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& args) { 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<UIThreadExtensionFunction> delete_function(function); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUpExtensionFunction(function); 527a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool result = extension_function_test_utils::RunFunction( 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function, args, browser(), GetFlags()); 529a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!result) { 530a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) LOG(ERROR) << function->GetError(); 531a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 532a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return result; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_function_test_utils::RunFunctionFlags GetFlags() { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return current_browser()->profile()->IsOffTheRecord() ? 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_function_test_utils::INCLUDE_INCOGNITO : 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_function_test_utils::NONE; 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension_function_test_utils::RunFunction*() only uses browser for its 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile(), so pass it the on-record browser so that it always uses the 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on-record profile to match real-life behavior. 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Value* RunFunctionAndReturnResult( 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<UIThreadExtensionFunction> function, 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& args) { 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpExtensionFunction(function.get()); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_function_test_utils::RunFunctionAndReturnSingleResult( 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function.get(), args, browser(), GetFlags()); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string RunFunctionAndReturnError( 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<UIThreadExtensionFunction> function, 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& args) { 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpExtensionFunction(function.get()); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_function_test_utils::RunFunctionAndReturnError( 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function.get(), args, browser(), GetFlags()); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool RunFunctionAndReturnString( 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<UIThreadExtensionFunction> function, 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& args, 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* result_string) { 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpExtensionFunction(function.get()); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult(function, args)); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(result.get()); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result.get() && result->GetAsString(result_string); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string DownloadItemIdAsArgList(const DownloadItem* download_item) { 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("[%d]", download_item->GetId()); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& downloads_directory() { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return downloads_directory_.path(); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadsEventsListener* events_listener() { return events_listener_.get(); } 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetUpExtensionFunction(UIThreadExtensionFunction* function) { 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_) { 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreate the tab each time for insulation. 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = chrome::AddSelectedTabWithURL( 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser(), 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_->GetResourceURL("empty.html"), 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_LINK); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function->set_extension(extension_); 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function->SetRenderViewHost(tab->GetRenderViewHost()); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateAndSetDownloadsDirectory() { 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(downloads_directory_.CreateUniqueTempDir()); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_browser()->profile()->GetPrefs()->SetFilePath( 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kDownloadDefaultDirectory, 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) downloads_directory_.path()); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir downloads_directory_; 602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const Extension* extension_; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* incognito_browser_; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* current_browser_; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadsEventsListener> events_listener_; 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadExtensionTest); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockIconExtractorImpl : public DownloadFileIconExtractor { 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockIconExtractorImpl(const base::FilePath& path, 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IconLoader::IconSize icon_size, 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& response) 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : expected_path_(path), 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_icon_size_(icon_size), 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response_(response) { 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockIconExtractorImpl() {} 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool ExtractIconURLForPath(const base::FilePath& path, 6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float scale, 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconLoader::IconSize icon_size, 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconURLCallback callback) OVERRIDE { 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(expected_path_.value().c_str(), path.value().c_str()); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_icon_size_, icon_size); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected_path_ == path && 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_icon_size_ == icon_size) { 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_ = callback; 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockIconExtractorImpl::RunCallback, 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunCallback() { 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_.Run(response_); 643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Drop the reference on extension function to avoid memory leaks. 644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback_ = IconURLCallback(); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_path_; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconLoader::IconSize expected_icon_size_; 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string response_; 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconURLCallback callback_; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ItemNotInProgress(DownloadItem* item) { 65490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return item->GetState() != DownloadItem::IN_PROGRESS; 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cancels the underlying DownloadItem when the ScopedCancellingItem goes out of 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// scope. Like a scoped_ptr, but for DownloadItems. 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedCancellingItem { 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ScopedCancellingItem(DownloadItem* item) : item_(item) {} 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ScopedCancellingItem() { 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item_->Cancel(true); 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::DownloadUpdatedObserver observer( 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) item_, base::Bind(&ItemNotInProgress)); 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer.WaitForEvent(); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* get() { return item_; } 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item_; 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedCancellingItem); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cancels all the underlying DownloadItems when the ScopedItemVectorCanceller 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// goes out of scope. Generalization of ScopedCancellingItem to many 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DownloadItems. 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedItemVectorCanceller { 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ScopedItemVectorCanceller(DownloadManager::DownloadVector* items) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : items_(items) { 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ScopedItemVectorCanceller() { 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DownloadManager::DownloadVector::const_iterator item = items_->begin(); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item != items_->end(); ++item) { 68590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if ((*item)->GetState() == DownloadItem::IN_PROGRESS) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*item)->Cancel(true); 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::DownloadUpdatedObserver observer( 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (*item), base::Bind(&ItemNotInProgress)); 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer.WaitForEvent(); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector* items_; 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedItemVectorCanceller); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Writes an HTML5 file so that it can be downloaded. 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HTML5FileWriter { 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 701a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static bool CreateFileForTesting(fileapi::FileSystemContext* context, 702a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const fileapi::FileSystemURL& path, 703a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const char*data, 704a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int length) { 705a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Create a temp file. 706a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::FilePath temp_file; 707a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!base::CreateTemporaryFile(&temp_file) || 708a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WriteFile(temp_file, data, length) != length) { 709a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 710a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 711a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Invoke the fileapi to copy it into the sandboxed filesystem. 712a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool result = false; 713a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::WaitableEvent done_event(true, false); 714a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserThread::PostTask( 715a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 716a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&CreateFileForTestingOnIOThread, 717a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(context), 718a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) path, temp_file, 719a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(&result), 720a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(&done_event))); 721a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Wait for that to finish. 722a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) done_event.Wait(); 723a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::DeleteFile(temp_file, false); 724a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return result; 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 728a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static void CopyInCompletion(bool* result, 729a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::WaitableEvent* done_event, 7305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Error error) { 731effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 7325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *result = error == base::File::FILE_OK; 733a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) done_event->Signal(); 734a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 735a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 736a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static void CreateFileForTestingOnIOThread( 737a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) fileapi::FileSystemContext* context, 738a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const fileapi::FileSystemURL& path, 739a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const base::FilePath& temp_file, 740a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool* result, 741a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::WaitableEvent* done_event) { 742effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 743a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) context->operation_runner()->CopyInForeignFile( 744a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) temp_file, path, 745a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&CopyInCompletion, 746a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(result), 747a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Unretained(done_event))); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 751c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(benjhayden) Merge this with the other TestObservers. 752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class JustInProgressDownloadObserver 753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public content::DownloadTestObserverInProgress { 754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JustInProgressDownloadObserver( 756c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadManager* download_manager, size_t wait_count) 757c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : content::DownloadTestObserverInProgress(download_manager, wait_count) { 758c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 759c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 760c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~JustInProgressDownloadObserver() {} 761c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool IsDownloadInFinalState(DownloadItem* item) OVERRIDE { 764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return item->GetState() == DownloadItem::IN_PROGRESS; 765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(JustInProgressDownloadObserver); 768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool ItemIsInterrupted(DownloadItem* item) { 77190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return item->GetState() == DownloadItem::INTERRUPTED; 772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 773c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 774558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochcontent::DownloadInterruptReason InterruptReasonExtensionToContent( 7755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::InterruptReason error) { 776558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch switch (error) { 7775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case downloads::INTERRUPT_REASON_NONE: 778558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return content::DOWNLOAD_INTERRUPT_REASON_NONE; 7795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define INTERRUPT_REASON(name, value) \ 7805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case downloads::INTERRUPT_REASON_##name: \ 7815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::DOWNLOAD_INTERRUPT_REASON_##name; 782558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "content/public/browser/download_interrupt_reason_values.h" 783558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#undef INTERRUPT_REASON 784558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 785558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NOTREACHED(); 786558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return content::DOWNLOAD_INTERRUPT_REASON_NONE; 787558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 788558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 7895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liudownloads::InterruptReason InterruptReasonContentToExtension( 790558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DownloadInterruptReason error) { 791558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch switch (error) { 792558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch case content::DOWNLOAD_INTERRUPT_REASON_NONE: 7935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return downloads::INTERRUPT_REASON_NONE; 7945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define INTERRUPT_REASON(name, value) \ 7955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case content::DOWNLOAD_INTERRUPT_REASON_##name: \ 7965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return downloads::INTERRUPT_REASON_##name; 797558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "content/public/browser/download_interrupt_reason_values.h" 798558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#undef INTERRUPT_REASON 799558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 800558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NOTREACHED(); 8015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return downloads::INTERRUPT_REASON_NONE; 802558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 803558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_Open) { 808c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadExtension("downloads_split"); 80923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DownloadsOpenFunction* open_function = new DownloadsOpenFunction(); 81023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function->set_user_gesture(true); 811558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunFunctionAndReturnError( 81323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function, 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[-42]").c_str()); 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* download_item = CreateSlowTestDownload(); 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(download_item); 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(download_item->GetOpened()); 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(download_item->GetOpenWhenComplete()); 8205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 8215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 8225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 8235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 8245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"application/octet-stream\"," 8255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 8265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 8275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_item->GetURL().spec().c_str()))); 82823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function = new DownloadsOpenFunction(); 82923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function->set_user_gesture(true); 830558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotComplete, 8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunFunctionAndReturnError( 83223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function, 8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItemIdAsArgList(download_item)).c_str()); 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FinishPendingSlowDownloads(); 8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(download_item->GetOpened()); 83723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 83823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function = new DownloadsOpenFunction(); 83923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_STREQ(errors::kUserGesture, 84023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) RunFunctionAndReturnError( 84123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function, 84223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DownloadItemIdAsArgList(download_item)).c_str()); 84323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(download_item->GetOpened()); 84423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 84523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function = new DownloadsOpenFunction(); 84623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) open_function->set_user_gesture(true); 84723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(RunFunction(open_function, 8482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(download_item->GetOpened()); 8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 8532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_PauseResumeCancelErase) { 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* download_item = CreateSlowTestDownload(); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(download_item); 856f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string error; 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call pause(). It should succeed and the download should be paused on 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return. 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(download_item->IsPaused()); 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 864f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling removeFile on a non-active download yields kNotComplete 865f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // and should not crash. http://crbug.com/319984 866f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsRemoveFileFunction(), 867f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DownloadItemIdAsArgList(download_item)); 868f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_STREQ(errors::kNotComplete, error.c_str()); 869f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calling pause() twice shouldn't be an error. 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(download_item->IsPaused()); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now try resuming this download. It should succeed. 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(download_item->IsPaused()); 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resume again. Resuming a download that wasn't paused is not an error. 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(download_item->IsPaused()); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pause again. 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(download_item->IsPaused()); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And now cancel. 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 89390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancel again. Shouldn't have any effect. 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemIdAsArgList(download_item))); 89890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 900f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling paused on a non-active download yields kNotInProgress. 901f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error = RunFunctionAndReturnError( 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsPauseFunction(), DownloadItemIdAsArgList(download_item)); 903558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotInProgress, error.c_str()); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling resume on a non-active download yields kNotResumable 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsResumeFunction(), DownloadItemIdAsArgList(download_item)); 908558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotResumable, error.c_str()); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 910f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling pause on a non-existent download yields kInvalidId. 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsPauseFunction(), "[-42]"); 913558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, error.c_str()); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Calling resume on a non-existent download yields kInvalidId 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsResumeFunction(), "[-42]"); 918558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, error.c_str()); 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 920f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Calling removeFile on a non-existent download yields kInvalidId. 921f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error = RunFunctionAndReturnError( 922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new DownloadsRemoveFileFunction(), "[-42]"); 923f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_STREQ(errors::kInvalidId, error.c_str()); 924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id = download_item->GetId(); 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsEraseFunction(), 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringPrintf("[{\"id\": %d}]", id))); 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadManager::DownloadVector items; 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCurrentManager()->GetAllDownloads(&items); 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0UL, items.size()); 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result); 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_item = NULL; 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ListValue* result_list = NULL; 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int element = -1; 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result_list->GetInteger(0, &element)); 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(id, element); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<UIThreadExtensionFunction> MockedGetFileIconFunction( 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& expected_path, 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconLoader::IconSize icon_size, 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& response) { 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<DownloadsGetFileIconFunction> function( 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsGetFileIconFunction()); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function->SetIconExtractorForTesting(new MockIconExtractorImpl( 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_path, icon_size, response)); 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return function; 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test downloads.getFileIcon() on in-progress, finished, cancelled and deleted 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// download items. 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_FileIcon_Active) { 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* download_item = CreateSlowTestDownload(); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(download_item); 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(download_item->GetTargetFilePath().empty()); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string args32(base::StringPrintf("[%d, {\"size\": 32}]", 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetId())); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result_string; 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the icon for the in-progress download. This call should succeed even 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the file type isn't registered. 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test whether the correct path is being pased into the icon extractor. 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {}]", download_item->GetId()), &result_string)); 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now try a 16x16 icon. 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::SMALL, "foo"), 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {\"size\": 16}]", download_item->GetId()), 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result_string)); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Explicitly asking for 32x32 should give us a 32x32 icon. 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32, &result_string)); 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Finish the download and try again. 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishPendingSlowDownloads(); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(DownloadItem::COMPLETE, download_item->GetState()); 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) // Check the path passed to the icon extractor post-completion. 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32, &result_string)); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now create another download. 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item = CreateSlowTestDownload(); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(download_item); 9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(download_item->GetTargetFilePath().empty()); 9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) args32 = base::StringPrintf("[%d, {\"size\": 32}]", download_item->GetId()); 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancel the download. As long as the download has a target path, we should 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be able to query the file icon. 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->Cancel(true); 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(download_item->GetTargetFilePath().empty()); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let cleanup complete on the FILE thread. 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(BrowserThread::FILE); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the path passed to the icon extractor post-cancellation. 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32, 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result_string)); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate an error during icon load by invoking the mock with an empty 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // result string. 1014c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error = RunFunctionAndReturnError( 1015c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockedGetFileIconFunction(download_item->GetTargetFilePath(), 1016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IconLoader::NORMAL, 1017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args32); 1019558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kIconNotFound, error.c_str()); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1021558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Once the download item is deleted, we should return kInvalidId. 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = download_item->GetId(); 1023868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) download_item->Remove(); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item = NULL; 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(static_cast<DownloadItem*>(NULL), 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCurrentManager()->GetDownload(id)); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsGetFileIconFunction(), args32); 1028558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can acquire file icons for history downloads regardless of 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// whether they exist or not. If the file doesn't exist we should receive a 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// generic icon from the OS/toolkit that may or may not be specific to the file 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// type. 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_FileIcon_History) { 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("real.txt"), 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("fake.txt"), 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector all_downloads; 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &all_downloads)); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1050b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::FilePath real_path = all_downloads[0]->GetTargetFilePath(); 1051b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::FilePath fake_path = all_downloads[1]->GetTargetFilePath(); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1053a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, base::WriteFile(real_path, "", 0)); 10547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(real_path)); 10557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(fake_path)); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DownloadManager::DownloadVector::iterator iter = all_downloads.begin(); 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != all_downloads.end(); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter) { 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result_string; 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a MockIconExtractorImpl to test if the correct path is being passed 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // into the DownloadFileIconExtractor. 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 1064b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) (*iter)->GetTargetFilePath(), IconLoader::NORMAL, "hello"), 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {\"size\": 32}]", (*iter)->GetId()), 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result_string)); 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("hello", result_string.c_str()); 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test passing the empty query to search(). 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchEmptyQuery) { 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem item(CreateSlowTestDownload()); 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item.get()); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{}]")); 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |filenameRegex| parameter for search(). 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchFilenameRegex) { 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("foobar"), 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector all_downloads; 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &all_downloads)); 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"filenameRegex\": \"foobar\"}]")); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item_value = NULL; 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int item_id = -1; 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item_value->GetInteger("id", &item_id)); 11107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(all_downloads[0]->GetId(), static_cast<uint32>(item_id)); 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |id| parameter for search(). 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, DownloadExtensionTest_SearchId) { 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSlowTestDownloads(2, &items); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedItemVectorCanceller delete_items(&items); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 11207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new DownloadsSearchFunction(), base::StringPrintf( 11217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "[{\"id\": %u}]", items[0]->GetId()))); 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item_value = NULL; 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int item_id = -1; 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item_value->GetInteger("id", &item_id)); 11307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(items[0]->GetId(), static_cast<uint32>(item_id)); 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test specifying both the |id| and |filename| parameters for search(). 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchIdAndFilename) { 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSlowTestDownloads(2, &items); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedItemVectorCanceller delete_items(&items); 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"id\": 0, \"filename\": \"foobar\"}]")); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0UL, result_list->GetSize()); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test a single |orderBy| parameter for search(). 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchOrderBy) { 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("zzz"), 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &items)); 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1165558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new DownloadsSearchFunction(), "[{\"orderBy\": [\"filename\"]}]")); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, result_list->GetSize()); 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item0_value = NULL; 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item1_value = NULL; 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string item0_name, item1_name; 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item1_value->GetString("filename", &item1_name)); 1177b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_GT(items[0]->GetTargetFilePath().value(), 1178b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) items[1]->GetTargetFilePath().value()); 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_LT(item0_name, item1_name); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test specifying an empty |orderBy| parameter for search(). 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchOrderByEmpty) { 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("zzz"), 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &items)); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1198558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new DownloadsSearchFunction(), "[{\"orderBy\": []}]")); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, result_list->GetSize()); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item0_value = NULL; 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item1_value = NULL; 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string item0_name, item1_name; 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item1_value->GetString("filename", &item1_name)); 1210b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_GT(items[0]->GetTargetFilePath().value(), 1211b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) items[1]->GetTargetFilePath().value()); 12120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // The order of results when orderBy is empty is unspecified. When there are 12130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // no sorters, DownloadQuery does not call sort(), so the order of the results 12140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // depends on the order of the items in base::hash_map<uint32,...> 12150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // DownloadManagerImpl::downloads_, which is unspecified and differs between 12160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // libc++ and libstdc++. http://crbug.com/365334 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |danger| option for search(). 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchDanger) { 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("zzz"), 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &items)); 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"danger\": \"content\"}]")); 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |state| option for search(). 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchState) { 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSlowTestDownloads(2, &items); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedItemVectorCanceller delete_items(&items); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items[0]->Cancel(true); 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"state\": \"in_progress\"}]")); 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the |limit| option for search(). 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchLimit) { 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSlowTestDownloads(2, &items); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedItemVectorCanceller delete_items(&items); 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"limit\": 1}]")); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test invalid search parameters. 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchInvalid) { 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error = RunFunctionAndReturnError( 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"filenameRegex\": \"(\"}]"); 1279558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilter, 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 1282558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new DownloadsSearchFunction(), "[{\"orderBy\": [\"goat\"]}]"); 1283558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidOrderBy, 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{\"limit\": -1}]"); 1287558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidQueryLimit, 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test searching using multiple conditions through multiple downloads. 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchPlural) { 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HistoryDownloadInfo kHistoryInfo[] = { 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("aaa"), 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::CANCELLED, 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("zzz"), 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FILE_PATH_LITERAL("baz"), 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::COMPLETE, 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager::DownloadVector items; 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &items)); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{" 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"state\": \"complete\", " 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"danger\": \"content\", " 1313558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch "\"orderBy\": [\"filename\"], " 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"limit\": 1}]")); 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsList(&result_list)); 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* item_value = NULL; 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); 13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::StringType item_name; 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item_value->GetString("filename", &item_name)); 1323b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_EQ(items[2]->GetTargetFilePath().value(), item_name); 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that incognito downloads are only visible in incognito contexts, and 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test that on-record downloads are visible in both incognito and on-record 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// contexts, for DownloadsSearchFunction, DownloadsPauseFunction, 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DownloadsResumeFunction, and DownloadsCancelFunction. 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito) { 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result_value; 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* result_list = NULL; 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* result_dict = NULL; 13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::StringType filename; 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_incognito = false; 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string on_item_arg; 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string off_item_arg; 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result_string; 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up one on-record item and one off-record item. 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up the off-record item first because otherwise there are mysteriously 3 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // items total instead of 2. 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(benjhayden): Figure out where the third item comes from. 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOffTheRecord(); 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* off_item = CreateSlowTestDownload(); 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(off_item); 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) off_item_arg = DownloadItemIdAsArgList(off_item); 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* on_item = CreateSlowTestDownload(); 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(on_item); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) on_item_arg = DownloadItemIdAsArgList(on_item); 1355b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_TRUE(on_item->GetTargetFilePath() != off_item->GetTargetFilePath()); 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extensions running in the incognito window should have access to both 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // items because the Test extension is in spanning mode. 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOffTheRecord(); 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_value.reset(RunFunctionAndReturnResult( 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{}]")); 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_value.get()); 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_value->GetAsList(&result_list)); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2UL, result_list->GetSize()); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &result_dict)); 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetString("filename", &filename)); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); 1368b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_TRUE(on_item->GetTargetFilePath() == base::FilePath(filename)); 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_incognito); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(1, &result_dict)); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetString("filename", &filename)); 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); 1373b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_TRUE(off_item->GetTargetFilePath() == base::FilePath(filename)); 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_incognito); 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extensions running in the on-record window should have access only to the 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on-record item. 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_value.reset(RunFunctionAndReturnResult( 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsSearchFunction(), "[{}]")); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_value.get()); 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_value->GetAsList(&result_list)); 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1UL, result_list->GetSize()); 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_list->GetDictionary(0, &result_dict)); 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetString("filename", &filename)); 1386b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_TRUE(on_item->GetTargetFilePath() == base::FilePath(filename)); 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_incognito); 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pausing/Resuming the off-record item while on the record should return an 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // error. Cancelling "non-existent" downloads is not an error. 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsPauseFunction(), off_item_arg); 1393558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsResumeFunction(), 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) off_item_arg); 1397558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError( 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsGetFileIconFunction(), 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {}]", off_item->GetId())); 1402558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidId, 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.c_str()); 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOffTheRecord(); 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do the FileIcon test for both the on- and off-items while off the record. 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE(benjhayden): This does not include the FileIcon test from history, 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just active downloads. This shouldn't be a problem. 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) on_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {}]", on_item->GetId()), &result_string)); 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) off_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("[%d, {}]", off_item->GetId()), &result_string)); 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do the pause/resume/cancel test for both the on- and off-items while off 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the record. 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(on_item->IsPaused()); 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(on_item->IsPaused()); 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), on_item_arg)); 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(on_item->IsPaused()); 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), on_item_arg)); 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(on_item->IsPaused()); 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(on_item->IsPaused()); 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); 143090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); 143290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsPauseFunction(), on_item_arg); 1434558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotInProgress, error.c_str()); 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsResumeFunction(), on_item_arg); 1436558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotResumable, error.c_str()); 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(off_item->IsPaused()); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(off_item->IsPaused()); 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(off_item->IsPaused()); 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(off_item->IsPaused()); 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(off_item->IsPaused()); 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); 144890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); 145090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); 1451558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch error = RunFunctionAndReturnError(new DownloadsPauseFunction(), off_item_arg); 1452558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotInProgress, error.c_str()); 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error = RunFunctionAndReturnError(new DownloadsResumeFunction(), 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) off_item_arg); 1455558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kNotResumable, error.c_str()); 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can start a download and that the correct sequence of events is 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fired for it. 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Basic) { 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1464eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 14815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 14825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 14835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 14845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 14855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 14865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 14875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 14885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 14895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 14905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 14915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 14925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 14935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 14945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 14955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 14965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 14975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 14985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 14995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 15005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 15015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 15025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can start a download from an incognito context, and that the 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// download knows that it's incognito. 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Incognito) { 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1511eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOffTheRecord(); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 15285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 15295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 15305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 15315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 15325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 15335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 15345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 15355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 15365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 15375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\":%d," 15385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 15395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 15405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 15415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 15425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 15435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 15445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 15455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\":%d," 15465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 15475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"," 15485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"}}]", 15495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN) 15535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This test is very flaky on Win. http://crbug.com/248438 1554868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_DownloadExtensionTest_Download_UnsafeHeaders \ 1555868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISABLED_DownloadExtensionTest_Download_UnsafeHeaders 1556868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 1557868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_DownloadExtensionTest_Download_UnsafeHeaders \ 1558868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DownloadExtensionTest_Download_UnsafeHeaders 1559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 1560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we disallow certain headers case-insensitively. 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MAYBE_DownloadExtensionTest_Download_UnsafeHeaders) { 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1565eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1566eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kUnsafeHeaders[] = { 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Accept-chArsEt", 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "accept-eNcoding", 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "coNNection", 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "coNteNt-leNgth", 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cooKIE", 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cOOkie2", 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "coNteNt-traNsfer-eNcodiNg", 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dAtE", 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ExpEcT", 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "hOsT", 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "kEEp-aLivE", 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rEfErEr", 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "tE", 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "trAilER", 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "trANsfer-eNcodiNg", 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "upGRAde", 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "usER-agENt", 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "viA", 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pRoxY-", 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "sEc-", 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pRoxY-probably-not-evil", 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "sEc-probably-not-evil", 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "oRiGiN", 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Access-Control-Request-Headers", 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Access-Control-Request-Method", 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t index = 0; index < arraysize(kUnsafeHeaders); ++index) { 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 1599558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidHeader, 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFunctionAndReturnError(new DownloadsDownloadFunction(), 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf( 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"unsafe-header-%d.txt\"," 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"headers\": [{" 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"name\": \"%s\"," 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"value\": \"unsafe\"}]}]", 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str(), 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<int>(index), 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUnsafeHeaders[index])).c_str()); 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1613558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) 1614558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#define MAYBE_DownloadExtensionTest_Download_Subdirectory\ 1615558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DISABLED_DownloadExtensionTest_Download_Subdirectory 1616558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#else 1617558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#define MAYBE_DownloadExtensionTest_Download_Subdirectory\ 1618558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DownloadExtensionTest_Download_Subdirectory 1619558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1621558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch MAYBE_DownloadExtensionTest_Download_Subdirectory) { 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1628558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1629558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 1630558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch "[{\"url\": \"%s\"," 1631558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"filename\": \"sub/dir/ect/ory.txt\"}]", 1632558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 1633558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(result.get()); 1634558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int result_id = -1; 1635558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 1636558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 1637558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(item); 1638558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ScopedCancellingItem canceller(item); 1639558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 1640558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 16415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 16425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 16435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 16445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 16455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 16465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 16475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 16485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 16495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 16505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 16515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 16525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 16535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 16545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 16555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 16565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("sub/dir/ect/ory.txt").c_str()))); 16575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 16585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 16595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 16605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 16615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 16625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 16635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that invalid filenames are disallowed. 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_InvalidFilename) { 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1670eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFunctionAndReturnError(new DownloadsDownloadFunction(), 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf( 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"../../../../../etc/passwd\"}]", 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str())).c_str()); 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that downloading invalid URLs immediately returns kInvalidURLError. 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_InvalidURLs) { 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kInvalidURLs[] = { 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "foo bar", 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "../hello", 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "/hello", 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://", 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "#frag", 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "foo/bar.html#frag", 1696558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch "google.com/", 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) { 1700558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidURL, 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFunctionAndReturnError(new DownloadsDownloadFunction(), 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf( 170358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str()) 170458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch << kInvalidURLs[index]; 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 170658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 17075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ("NETWORK_INVALID_REQUEST", RunFunctionAndReturnError( 1708bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch new DownloadsDownloadFunction(), 1709bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]").c_str()); 17105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ("NETWORK_INVALID_REQUEST", RunFunctionAndReturnError( 1711bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch new DownloadsDownloadFunction(), 1712bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch "[{\"url\": \"javascript:return false;\"}]").c_str()); 17135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ("NETWORK_FAILED", RunFunctionAndReturnError( 1714bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch new DownloadsDownloadFunction(), 1715bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch "[{\"url\": \"ftp://example.com/example.txt\"}]").c_str()); 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// permissions, test downloading from ftp. 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Valid URLs plus fragments are still valid URLs. 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_URLFragment) { 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1725eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1726eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0#fragment").spec(); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 17425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 17435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 17445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 17455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 17465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 17475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 17485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 17495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 17505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 17515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 17525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 17535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 17545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 17555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 17565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 17575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 17585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 17595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 17605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 17615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 17625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 17635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// conflictAction may be specified without filename. 17670529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 17680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadExtensionTest_Download_ConflictAction) { 17690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static char kFilename[] = "download.txt"; 17700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoadExtension("downloads_split"); 17710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string download_url = "data:text/plain,hello"; 17720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GoOnTheRecord(); 17730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 17740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 17750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 17760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "[{\"url\": \"%s\"}]", download_url.c_str()))); 17770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result.get()); 17780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int result_id = -1; 17790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 17800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 17810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item); 17820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedCancellingItem canceller(item); 17830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 17840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 17855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 17865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 17875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 17885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 17895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 17905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 17915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 17925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 17935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 17945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 17955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 17965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 17975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 17985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 17995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 18005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename(kFilename).c_str()))); 18015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 18055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 18065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 18075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 18080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 18090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result.reset(RunFunctionAndReturnResult( 18100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 18110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "[{\"url\": \"%s\", \"conflictAction\": \"overwrite\"}]", 18120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch download_url.c_str()))); 18130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result.get()); 18140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result_id = -1; 18150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 18160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch item = GetCurrentManager()->GetDownload(result_id); 18170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item); 18180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedCancellingItem canceller2(item); 18190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 18200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 18215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 18225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 18245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 18255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 18265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 18275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 18285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 18295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 18335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 18345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 18355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 18365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename(kFilename).c_str()))); 18375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 18415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 18425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 18435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 18440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 18450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Valid data URLs are valid URLs. 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_DataURL) { 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = "data:text/plain,hello"; 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"data.txt\"}]", download_url.c_str()))); 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 18665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 18685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 18695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 18705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 18715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 18725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 18735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 18775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 18785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 18795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 18805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("data.txt").c_str()))); 18815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 18825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 18835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 18845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 18855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 18865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 18875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Valid file URLs are valid URLs. 18915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN) 18922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Disabled due to crbug.com/175711 18932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_Download_File \ 18942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISABLED_DownloadExtensionTest_Download_File 18952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 18962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_Download_File \ 18972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_Download_File 18982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 19002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_DownloadExtensionTest_Download_File) { 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = "file:///"; 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url += "C:/"; 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"file.txt\"}]", download_url.c_str()))); 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 19215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 19225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"incognito\": false," 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"mime\": \"text/html\"," 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"paused\": false," 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"url\": \"%s\"}]", 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 19285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 19295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 19305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": {" 1932b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) " \"previous\": \"\"," 1933c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"%s\"}}]", 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_id, 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFilename("file.txt").c_str()))); 19365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 19375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 19385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 1939c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"state\": {" 1940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"previous\": \"in_progress\"," 1941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"complete\"}}]", 1942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that auth-basic-succeed would fail if the resource requires the 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Authorization header and chrome fails to propagate it back to the server. 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests both that testserver.py does not succeed when it should fail as 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// well as how the downloads extension API exposes the failure to extensions. 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_AuthBasic_Fail) { 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1952eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1953eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("auth-basic").spec(); 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"auth-basic-fail.txt\"}]", 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1970558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(WaitForInterruption( 1971558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch item, 1972558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, 1973558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::StringPrintf("[{\"danger\": \"safe\"," 1974558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"incognito\": false," 1975558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"mime\": \"text/html\"," 1976558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"paused\": false," 1977558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"url\": \"%s\"}]", 1978558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that DownloadsDownloadFunction propagates |headers| to the URLRequest. 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Headers) { 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 1985eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 1986eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/downloads/" 19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_headers=Foo:bar&expected_headers=Qx:yo").spec(); 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"headers-succeed.txt\"," 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"headers\": [" 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {\"name\": \"Foo\", \"value\": \"bar\"}," 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {\"name\": \"Qx\", \"value\":\"yo\"}]}]", 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 20085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 20095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 20105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 20115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"application/octet-stream\"," 20125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 20135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 20145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 20155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 20165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 20175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 20185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 20195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 20205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 20215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 20225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("headers-succeed.txt").c_str()))); 20235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 20245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 20255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 20265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 20275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 20285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 20295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that headers-succeed would fail if the resource requires the headers and 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chrome fails to propagate them back to the server. This tests both that 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// testserver.py does not succeed when it should fail as well as how the 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// downloads extension api exposes the failure to extensions. 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Headers_Fail) { 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2039eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2040eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/downloads/" 20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_headers=Foo:bar&expected_headers=Qx:yo").spec(); 20435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 20445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"headers-fail.txt\"}]", 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2058558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(WaitForInterruption( 2059558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch item, 2060558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2061558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::StringPrintf("[{\"danger\": \"safe\"," 2062558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"incognito\": false," 20635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " \"bytesReceived\": 0.0," 20645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " \"fileSize\": 0.0," 2065558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"mime\": \"\"," 2066558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"paused\": false," 2067558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"url\": \"%s\"}]", 2068558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that DownloadsDownloadFunction propagates the Authorization header 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// correctly. 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_AuthBasic) { 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2076eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2077eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("auth-basic").spec(); 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is just base64 of 'username:secret'. 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kAuthorization = "dXNlcm5hbWU6c2VjcmV0"; 20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"auth-basic-succeed.txt\"," 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"headers\": [{" 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"name\": \"Authorization\"," 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"value\": \"Basic %s\"}]}]", 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str(), kAuthorization))); 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 21005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 21025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 21035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"bytesReceived\": 0.0," 21045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"fileSize\": 0.0," 21055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/html\"," 21065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 21075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 21085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 21095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 21105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 21125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 21135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 21145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 21155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that DownloadsDownloadFunction propagates the |method| and |body| 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// parameters to the URLRequest. 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Post) { 21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/post/downloads/" 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_body=BODY").spec(); 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"post-succeed.txt\"," 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"method\": \"POST\"," 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"body\": \"BODY\"}]", 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 21455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 21475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 21485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"application/octet-stream\"," 21495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 21505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 21515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 21525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 21535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 21555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 21565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 21575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 21585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 21595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("post-succeed.txt").c_str()))); 21605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 21615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 21625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 21635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 21645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 21655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 21665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that downloadPostSuccess would fail if the resource requires the POST 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// method, and chrome fails to propagate the |method| parameter back to the 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server. This tests both that testserver.py does not succeed when it should 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fail, and this tests how the downloads extension api exposes the failure to 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extensions. 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Post_Get) { 21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/post/downloads/" 21805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_body=BODY").spec(); 21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 21825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"body\": \"BODY\"," 21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"post-get.txt\"}]", 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2197558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(WaitForInterruption( 2198558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch item, 2199558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2200558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::StringPrintf("[{\"danger\": \"safe\"," 2201558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"incognito\": false," 2202558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"mime\": \"\"," 2203558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"paused\": false," 2204558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"id\": %d," 2205558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"url\": \"%s\"}]", 2206558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch result_id, 2207558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that downloadPostSuccess would fail if the resource requires the POST 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// method, and chrome fails to propagate the |body| parameter back to the 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server. This tests both that testserver.py does not succeed when it should 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fail, and this tests how the downloads extension api exposes the failure to 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extensions. 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Post_NoBody) { 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL("files/post/downloads/" 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a_zip_file.zip?expected_body=BODY").spec(); 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"," 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"method\": \"POST\"," 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": \"post-nobody.txt\"}]", 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2238558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(WaitForInterruption( 2239558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch item, 2240558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2241558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::StringPrintf("[{\"danger\": \"safe\"," 2242558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"incognito\": false," 2243558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"mime\": \"\"," 2244558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"paused\": false," 2245558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"id\": %d," 2246558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"url\": \"%s\"}]", 2247558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch result_id, 2248558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch download_url.c_str()))); 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that cancel()ing an in-progress download causes its state to transition 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to interrupted, and test that that state transition is detectable by an 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// onChanged event listener. TODO(benjhayden): Test other sources of 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interruptions such as server death. 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_Cancel) { 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 2258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string download_url = test_server()->GetURL( 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "download-known-size").spec(); 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 22765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 22775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"incognito\": false," 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"mime\": \"application/octet-stream\"," 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"paused\": false," 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"id\": %d," 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"url\": \"%s\"}]", 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_id, 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item->Cancel(true); 22865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 22875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 22885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 2289558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch " \"error\": {\"current\":\"USER_CANCELED\"}," 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"state\": {" 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"previous\": \"in_progress\"," 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"current\": \"interrupted\"}}]", 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_id))); 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test downloading filesystem: URLs. 22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: chrome disallows creating HTML5 FileSystem Files in incognito. 22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadExtensionTest_Download_FileSystemURL) { 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kPayloadData = "on the record\ndata"; 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoOnTheRecord(); 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadExtension("downloads_split"); 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2304a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string download_url = "filesystem:" + GetExtensionURL() + 23055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "temporary/on_record.txt"; 2306a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2307a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Setup a file in the filesystem which we can download. 2308a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(HTML5FileWriter::CreateFileForTesting( 2309a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserContext::GetDefaultStoragePartition(browser()->profile())-> 2310a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetFileSystemContext(), 2311a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) fileapi::FileSystemURL::CreateForTest(GURL(download_url)), 2312a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kPayloadData, strlen(kPayloadData))); 2313a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2314a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Now download it. 23155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 23165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 23185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result.get()); 23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result_id = -1; 23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(item); 23245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedCancellingItem canceller(item); 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 23285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"incognito\": false," 23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"mime\": \"text/plain\"," 23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"paused\": false," 23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"url\": \"%s\"}]", 23345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_url.c_str()))); 23355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 23365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"filename\": {" 2339b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) " \"previous\": \"\"," 2340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"%s\"}}]", 23415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_id, 23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFilename("on_record.txt").c_str()))); 23435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 23445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 2346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"state\": {" 2347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"previous\": \"in_progress\"," 2348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"complete\"}}]", 2349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string disk_data; 235158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(base::ReadFileToString(item->GetTargetFilePath(), &disk_data)); 23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(kPayloadData, disk_data.c_str()); 23535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_NoChange) { 23572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 23582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 23592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 23622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 23632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 23652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 23662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 23672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 23682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 23692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 23702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 23712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 23722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 23732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 23742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 23752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 23775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 23785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 23802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 23812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 23822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 23832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 23842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 23852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 23862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 23875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 23885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 23895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 23905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 23915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 23922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 239390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 23942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 23962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 23972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 23982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 23992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 24002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 24012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 24022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), 24035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 24042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 24052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 24062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 24085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 24095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 24105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 24115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 24125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 24135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 24145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 24155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 24165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 24175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 24185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 24195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 24205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 24215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 24225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 24232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 24242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2425010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Disabled due to cross-platform flakes; http://crbug.com/370531. 2426010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 2427010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadExtensionTest, 2428010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DISABLED_DownloadExtensionTest_OnDeterminingFilename_Timeout) { 2429010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GoOnTheRecord(); 2430010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LoadExtension("downloads_split"); 2431010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AddFilenameDeterminer(); 2432010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 2433010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 2434010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 2435010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2436010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ExtensionDownloadsEventRouter::SetDetermineFilenameTimeoutSecondsForTesting( 2437010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0); 2438010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2439010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Start downloading a file. 2440010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 2441010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 2442010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 2443010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(result.get()); 2444010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int result_id = -1; 2445010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 2446010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2447010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(item); 2448010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScopedCancellingItem canceller(item); 2449010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2450010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2451010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 2452010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 2453010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"danger\": \"safe\"," 2454010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"incognito\": false," 2455010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"id\": %d," 2456010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"mime\": \"text/plain\"," 2457010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"paused\": false," 2458010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"url\": \"%s\"}]", 2459010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2460010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) download_url.c_str()))); 2461010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor( 2462010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) downloads::OnDeterminingFilename::kEventName, 2463010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2464010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"filename\":\"slow.txt\"}]", 2465010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id))); 2466010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 2467010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2468010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2469010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Do not respond to the onDeterminingFilename. 2470010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2471010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The download should complete successfully. 2472010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 2473010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2474010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"filename\": {" 2475010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"previous\": \"\"," 2476010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"current\": \"%s\"}}]", 2477010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2478010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetFilename("slow.txt").c_str()))); 2479010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 2480010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2481010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"state\": {" 2482010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"previous\": \"in_progress\"," 2483010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"current\": \"complete\"}}]", 2484010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id))); 2485010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 2486010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2487010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2488010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_Twice) { 2489010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GoOnTheRecord(); 2490010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LoadExtension("downloads_split"); 2491010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AddFilenameDeterminer(); 2492010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 2493010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 2494010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 2495010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2496010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Start downloading a file. 2497010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 2498010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 2499010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 2500010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(result.get()); 2501010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int result_id = -1; 2502010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 2503010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2504010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(item); 2505010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScopedCancellingItem canceller(item); 2506010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2507010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2508010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 2509010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 2510010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"danger\": \"safe\"," 2511010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"incognito\": false," 2512010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"id\": %d," 2513010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"mime\": \"text/plain\"," 2514010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"paused\": false," 2515010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"url\": \"%s\"}]", 2516010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2517010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) download_url.c_str()))); 2518010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor( 2519010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) downloads::OnDeterminingFilename::kEventName, 2520010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2521010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"filename\":\"slow.txt\"}]", 2522010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id))); 2523010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 2524010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2525010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2526010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Respond to the onDeterminingFilename. 2527010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string error; 2528010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 2529010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) browser()->profile(), 2530010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 2531010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetExtensionId(), 2532010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2533010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath(), 2534010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2535010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &error)); 2536010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ("", error); 2537010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2538010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Calling DetermineFilename again should return an error instead of calling 2539010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // DownloadTargetDeterminer. 2540010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2541010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) browser()->profile(), 2542010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 2543010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetExtensionId(), 2544010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2545010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("different")), 2546010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 2547010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &error)); 2548010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(errors::kTooManyListeners, error); 2549010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2550010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The download should complete successfully. 2551010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 2552010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2553010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"filename\": {" 2554010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"previous\": \"\"," 2555010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"current\": \"%s\"}}]", 2556010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id, 2557010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetFilename("slow.txt").c_str()))); 2558010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 2559010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::StringPrintf("[{\"id\": %d," 2560010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"state\": {" 2561010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"previous\": \"in_progress\"," 2562010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"current\": \"complete\"}}]", 2563010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result_id))); 2564010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 2565010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 25662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 25672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 25682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_DangerousOverride) { 25692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 25702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 25712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2572eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2573eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 25742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 25752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 25762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 25772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 25782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 25792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 25802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 25812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 25822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 25832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 25842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 25852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 25862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 25872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 25885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 25895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 25905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 25912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 25922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 25932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 25942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 25952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 25962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 25972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 25985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 25995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 26025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 26032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 260490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 26052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 26072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 26082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 26092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 26102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 26112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 26122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 26132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("overridden.swf")), 26145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 26152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 26162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 26172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 26195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"danger\": {" 26225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\":\"safe\"," 26235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\":\"file\"}}]", 26245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 26252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2626868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) item->ValidateDangerousDownload(); 26275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 26285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"danger\": {" 26315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\":\"file\"," 26325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\":\"accepted\"}}]", 26335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 26345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 26355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"state\": {" 26382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"previous\": \"in_progress\"," 26392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"current\": \"complete\"}}]", 2640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 2641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(downloads_directory().AppendASCII("overridden.swf"), 2642b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) item->GetTargetFilePath()); 26432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 26442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 26462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 26472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_ReferencesParentInvalid) { 26482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 26492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 26502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2651eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2652eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 26532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 26542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 26562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 26572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 26582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 26592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 26602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 26612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 26622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 26632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 26642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 26652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 26662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 26685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 26702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 26712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 26722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 26732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 26742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 26752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 26762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 26775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 26785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 26815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 26822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 268390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 26842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 26862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 26872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 26882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 26892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 26902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 26912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 26922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("sneaky/../../sneaky.txt")), 26935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 26942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 2695558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 26965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 26975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 26985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 26992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"filename\": {" 2700b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) " \"previous\": \"\"," 2701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"%s\"}}]", 27022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 27032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetFilename("slow.txt").c_str()))); 27045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 27055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 2707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"state\": {" 2708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"previous\": \"in_progress\"," 2709c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"complete\"}}]", 2710c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 27112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 27122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 27142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 2715c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_IllegalFilename) { 27162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 27172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 27182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2719eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2720eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 27212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 27222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 27242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 27252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 27262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 27272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 27282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 27292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 27302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 27312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 27322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 27332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 27342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 27365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 27382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 27392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 27402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 27412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 27422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 27432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 27442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 27455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 27465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 27485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 27495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 27502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 275190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 27522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 27542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 27552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 27562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 27572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 27582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 27592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 2760c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("<")), 27615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 27622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 2763558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 27645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 27655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 27675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 27685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 27695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 27705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 27715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 27725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 27735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 27745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 27755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 27765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 27775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 27785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 27792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 27802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 27822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 2783c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_IllegalFilenameExtension) { 27842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 27852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 27862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2787eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2788eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 27892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 27902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 27922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 27932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 27942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 27952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 27962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 27972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 27982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 27992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 28002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 28012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 28022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 28045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 28062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 28072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 28082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 28092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 28102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 28112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 28122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 28135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 28145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 28165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 28175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 28182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 281990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 28202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 28222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 28232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 28242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 28252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 28262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 28272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 2828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL( 2829c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}/foo")), 28305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 28312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 2832558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 28335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 28345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 28365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 28375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 28385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 28395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 28405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 28415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 28425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 28445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 28455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 28465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 28475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 28482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 28494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) 28504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_ReservedFilename\ 28514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISABLED_DownloadExtensionTest_OnDeterminingFilename_ReservedFilename 28524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 28534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_ReservedFilename\ 28544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_ReservedFilename 28554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 28562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 28572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 28584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MAYBE_DownloadExtensionTest_OnDeterminingFilename_ReservedFilename) { 28592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 28602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 28612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 2862eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2863eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 28642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 28652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 28672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 28682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 28692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 28702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 28712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 28722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 28732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 28742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 28752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 28762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 28772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 28795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 28812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 28822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 28832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 28842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 28852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 28862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 28872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 28885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 28895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 28905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 28915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 28925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 28932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 289490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 28952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2896c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. 28972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 28982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 28992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 29002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 29012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 29022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 2903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("con.foo")), 29045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 29052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 2906558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 29075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 29085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 29115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 29125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 29135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 29145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 29155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 29165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 29195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 29205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 29215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 2922c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2923c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2924c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 2925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest, 2926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_CurDirInvalid) { 2927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GoOnTheRecord(); 2928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadExtension("downloads_split"); 2929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddFilenameDeterminer(); 2930eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2931eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 2932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 2933c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Start downloading a file. 2935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 2936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 2937c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 2938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result.get()); 2939c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int result_id = -1; 2940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 2941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item); 2943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedCancellingItem canceller(item); 2944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2945c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 29475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 2949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"incognito\": false," 2950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"id\": %d," 2951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"mime\": \"text/plain\"," 2952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"paused\": false," 2953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"url\": \"%s\"}]", 2954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id, 2955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) download_url.c_str()))); 29565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 29575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 29605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 2961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 296290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 29632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. 2965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error; 2966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->profile(), 2968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 2969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExtensionId(), 2970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id, 2971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL(".")), 29725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 2974558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 29755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 29765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 29795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 29805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 29815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 29825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 29835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 29845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 29855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 29865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 29875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 29885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 29895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 2990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 2993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest, 2994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_ParentDirInvalid) { 2995eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 2996eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 2997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GoOnTheRecord(); 2998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadExtension("downloads_split"); 2999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddFilenameDeterminer(); 3000c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 3001c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Start downloading a file. 3003c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 3004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 3005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 3006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result.get()); 3007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int result_id = -1; 3008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 3009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 3010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item); 3011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedCancellingItem canceller(item); 3012c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 3013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 30155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 3017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"incognito\": false," 3018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"id\": %d," 3019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"mime\": \"text/plain\"," 3020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"paused\": false," 3021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"url\": \"%s\"}]", 30222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 3023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) download_url.c_str()))); 30245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 30255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 30285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 3029c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 303090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3031c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. 3033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error; 3034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 3035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->profile(), 3036c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 3037c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExtensionId(), 3038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id, 3039c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("..")), 30405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3041c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 3042558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 30435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 30445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 30475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 30485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 30495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 30505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 30515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 30525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 30555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 30565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 30575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 30582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 30592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 30612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 3062c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_AbsPathInvalid) { 30632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 30642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 30652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 3066eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3067eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 30682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 30692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 30712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 30722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 30732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 30742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 30752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 30762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 30772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 30782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 30792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 30802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 30812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 30835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 30852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 30862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 30872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 30882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 30892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 30902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 30912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 30925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 30935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 30945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 30955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 30965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 30972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 309890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 30992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. Absolute paths should be rejected. 31012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 31022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 31032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 31042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 31052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 31062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 3107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) downloads_directory().Append(FILE_PATH_LITERAL("sneaky.txt")), 31085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 31092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 3110558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 31112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 31135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 31152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"filename\": {" 3116b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) " \"previous\": \"\"," 3117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"%s\"}}]", 31182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 31192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetFilename("slow.txt").c_str()))); 31205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 31215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 3123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"state\": {" 3124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"previous\": \"in_progress\"," 3125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " \"current\": \"complete\"}}]", 3126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id))); 31272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 31282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 31302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 3131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_EmptyBasenameInvalid) { 31322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 31332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 31342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 3135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 31372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 31382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 31402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 31412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 31422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 31432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 31442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 31452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 31462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 31472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 31482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 31492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 3150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 31525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 31542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 31552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 31562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 31572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 31582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 31592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 31602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 31615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 31625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 31645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 31655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 31662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 316790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 31682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Respond to the onDeterminingFilename. Empty basenames should be rejected. 3170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string error; 3171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 3172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->profile(), 3173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 3174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExtensionId(), 3175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result_id, 3176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("foo/")), 31775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 3179558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); 3180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 31825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 31845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 31855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 31865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 31875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 31885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 31895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 31905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 31915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 31925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 31935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 31945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 31955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 31960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 31970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 31980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// conflictAction may be specified without filename. 31990529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F( 32000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadExtensionTest, 32010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadExtensionTest_OnDeterminingFilename_Overwrite) { 32020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GoOnTheRecord(); 32030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoadExtension("downloads_split"); 32040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AddFilenameDeterminer(); 32050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 32060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(test_server()->Start()); 32070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string download_url = test_server()->GetURL("slow?0").spec(); 32080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Start downloading a file. 32100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 32110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 32120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "[{\"url\": \"%s\"}]", download_url.c_str()))); 32130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result.get()); 32140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int result_id = -1; 32150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 32160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 32170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item); 32180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedCancellingItem canceller(item); 32190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 32205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 32215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 32235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 32245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 32255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 32265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 32275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 32285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 32295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 32305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 32315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 32345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 32350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item->GetTargetFilePath().empty()); 32360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 32370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Respond to the onDeterminingFilename. 32390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string error; 32400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 32410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch browser()->profile(), 32420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch false, 32430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId(), 32440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result_id, 32450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::FilePath(), 32465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 32470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch &error)); 32480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ("", error); 32490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 32515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 32545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 32555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 32565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 32575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 32585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 32595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 32625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 32635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 32645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 32650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Start downloading a file. 32670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result.reset(RunFunctionAndReturnResult( 32680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new DownloadsDownloadFunction(), base::StringPrintf( 32690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "[{\"url\": \"%s\"}]", download_url.c_str()))); 32700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result.get()); 32710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result_id = -1; 32720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(result->GetAsInteger(&result_id)); 32730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch item = GetCurrentManager()->GetDownload(result_id); 32740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item); 32750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedCancellingItem canceller2(item); 32760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 32770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 32795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 32815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 32825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 32835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 32845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 32855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 32865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 32875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 32885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 32895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 32905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 32915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 32925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 32930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(item->GetTargetFilePath().empty()); 32940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 32950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 32960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Respond to the onDeterminingFilename. 32970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Also test that DetermineFilename allows (chrome) extensions to set 32980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // filenames without (filename) extensions. (Don't ask about v8 extensions or 32990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // python extensions or kernel extensions or firefox extensions...) 33000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch error = ""; 33010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 33020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch browser()->profile(), 33030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch false, 33040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetExtensionId(), 33050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch result_id, 33060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::FilePath(), 33075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 33080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch &error)); 33090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ("", error); 33100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 33115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 33125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 33155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 33165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 33175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 33185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 33195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 33205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 33235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 33245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 33255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 3326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 3327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 3329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest, 3330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_Override) { 3331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GoOnTheRecord(); 3332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadExtension("downloads_split"); 3333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddFilenameDeterminer(); 3334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 3336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 3337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Start downloading a file. 3339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 3340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 3341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 3342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result.get()); 3343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int result_id = -1; 3344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 3345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 3346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item); 3347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedCancellingItem canceller(item); 3348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 33495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 33505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 33525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 33535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 33545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 33555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 33565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 33575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 33585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 33595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 33605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 33635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 3364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 336590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 33682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 33692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 33702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 33712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 33722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 33732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 33742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), 33755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 33762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 33772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 33782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 33795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 33805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 33835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 33845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 33855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 33865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("slow.txt").c_str()))); 33875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 33885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 33895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 33905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 33915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 33925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 33935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 33942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 33952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 33962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.reset(RunFunctionAndReturnResult( 33972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 33982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 33992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 34002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id = -1; 34012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 34022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) item = GetCurrentManager()->GetDownload(result_id); 34032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 34042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller2(item); 34052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 34062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 34085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 34105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 34115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 34125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 34135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 34145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 34155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 34165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 34175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 34185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 34215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 34222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 342390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 34242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 34262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Also test that DetermineFilename allows (chrome) extensions to set 34272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // filenames without (filename) extensions. (Don't ask about v8 extensions or 34282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // python extensions or kernel extensions or firefox extensions...) 34292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error = ""; 34302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 34312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile(), 34322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 34332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 34342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 34352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("foo")), 34365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 34372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 34382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 34392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 34415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 34445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 34455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 34465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 34475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("foo").c_str()))); 34485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 34495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 34525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 34535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 34545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 34552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 34562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO test precedence rules: install_time 34582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 34602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 34612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_RemoveFilenameDeterminer) { 3462eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 34642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 34652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 34662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderProcessHost* host = AddFilenameDeterminer(); 34672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 34682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start downloading a file. 34702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 34712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 34722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 34732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 34742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 34752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 34762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 34772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 34782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 34792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 34802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 34825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 34842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 34852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 34862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 34872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 34882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 34892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 34902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 34915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 34925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 34935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 34945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 34955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 34962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 349790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 34982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove a determiner while waiting for it. 35002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveFilenameDeterminer(host); 35012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 35035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 35055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 35065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 35075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 35085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 35092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 35102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 35122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 35132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_IncognitoSplit) { 35142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 3515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3516eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 35172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 35182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 35202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 35212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOffTheRecord(); 35232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 35242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start an on-record download. 35262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 35272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 35282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 35292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 35302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 35312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 35322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 35332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 35342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 35352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 35362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 35372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 35395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 35405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 35422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 35432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 35442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 35452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 35462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 35472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 35482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 35495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 35505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 35525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 35535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 35545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 35552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 355690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 35572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename events. 35592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 35602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 35612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 35622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 35632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 35642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 35652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("42.txt")), 35665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 35672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 35682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 35692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 35715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 35725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 35745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 35755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 35765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 35775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 35785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("42.txt").c_str()))); 35795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 35805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 35815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 35825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 35835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 35845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 35855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 35862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start an incognito download for comparison. 35882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOffTheRecord(); 35892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.reset(RunFunctionAndReturnResult( 35902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 35912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 35922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 35932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id = -1; 35942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 35952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) item = GetCurrentManager()->GetDownload(result_id); 35962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 35972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller2(item); 35982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 35992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 36015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 36035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 36045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 36055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 36065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 36075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 36085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 36095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 36102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // On-Record renderers should not see events for off-record items. 36115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 36125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 36155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 36165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 36172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 361890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 36192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 36212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error = ""; 36222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 36232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 36242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 36252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 36262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 36272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("5.txt")), 36285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 36292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 36302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 36312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 36335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 36345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 36375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 36385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 36395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 36405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("5.txt").c_str()))); 36415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 36425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 36455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 36465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 36475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 36482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 36492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 36512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 36522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_IncognitoSpanning) { 36532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_spanning"); 3654eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3655eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 36562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string download_url = test_server()->GetURL("slow?0").spec(); 36572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 36592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddFilenameDeterminer(); 36602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // There is a single extension renderer that sees both on-record and 36622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // off-record events. The extension functions see the on-record profile with 36632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // include_incognito=true. 36642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start an on-record download. 36662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 36672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 36682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 36692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 36702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 36712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int result_id = -1; 36722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 36732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 36742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 36752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 36762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 36772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename events. 36795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 36805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 36822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"incognito\": false," 36832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"id\": %d," 36842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"mime\": \"text/plain\"," 36852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"paused\": false," 36862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"url\": \"%s\"}]", 36872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 36882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_url.c_str()))); 36895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 36905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 36915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 36925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 36935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 36945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 36952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 369690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 36972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename events. 36992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 37002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 37012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 37022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, 37032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 37042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 37052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("42.txt")), 37065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 37072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 37082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 37092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 37115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 37125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 37155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 37165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 37175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 37185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("42.txt").c_str()))); 37195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 37205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 37235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 37245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 37255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 37262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start an incognito download for comparison. 37282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOffTheRecord(); 37292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.reset(RunFunctionAndReturnResult( 37302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new DownloadsDownloadFunction(), base::StringPrintf( 37312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[{\"url\": \"%s\"}]", download_url.c_str()))); 37322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result.get()); 37332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id = -1; 37342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 37352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) item = GetCurrentManager()->GetDownload(result_id); 37362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item); 37372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller2(item); 37382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 37392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 37415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 37435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 37445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 37455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"text/plain\"," 37465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false," 37475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"url\": \"%s\"}]", 37485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 37495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu download_url.c_str()))); 37505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 37515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": true," 37545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"slow.txt\"}]", 37555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 37562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 375790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 37582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Respond to the onDeterminingFilename. 37602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error = ""; 37612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 37622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 37632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, 37642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 37652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_id, 37662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("42.txt")), 37675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 37682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error)); 37692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 37702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 37725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 37735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 37765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 37775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 37785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id, 37795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("42 (1).txt").c_str()))); 37805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 37815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 37825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 37835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 37845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 37855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 37865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 37872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 37882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37895e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#if defined(OS_WIN) 37905e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)// This test is very flaky on Win XP and Aura. http://crbug.com/248438 37915e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume \ 37925e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) DISABLED_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume 37935e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#else 37945e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume \ 37955e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) DownloadExtensionTest_OnDeterminingFilename_InterruptedResume 37965e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#endif 37975e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) 3798c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test download interruption while extensions determining filename. Should not 3799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// re-dispatch onDeterminingFilename. 38002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F( 38012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadExtensionTest, 38025e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume) { 3803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 3804c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switches::kEnableDownloadResumption); 38052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadExtension("downloads_split"); 3806eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3807eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(test_server()->Start()); 38082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GoOnTheRecord(); 3809a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::RenderProcessHost* host = AddFilenameDeterminer(); 38102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start a download. 3812c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadItem* item = NULL; 3813c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 3814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadManager* manager = GetCurrentManager(); 3815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 3816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new JustInProgressDownloadObserver(manager, 1)); 3817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(0, manager->InProgressCount()); 38188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_EQ(0, manager->NonMaliciousInProgressCount()); 3819c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Tabs created just for a download are automatically closed, invalidating 3820c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the download's WebContents. Downloads without WebContents cannot be 3821c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // resumed. http://crbug.com/225901 3822c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 3823c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) current_browser(), 3824c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl), 3825c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CURRENT_TAB, 3826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::BROWSER_TEST_NONE); 3827c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer->WaitForFinished(); 3828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::IN_PROGRESS)); 3829c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadManager::DownloadVector items; 3830c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manager->GetAllDownloads(&items); 3831c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (DownloadManager::DownloadVector::iterator iter = items.begin(); 3832c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter != items.end(); ++iter) { 3833c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if ((*iter)->GetState() == DownloadItem::IN_PROGRESS) { 3834c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There should be only one IN_PROGRESS item. 3835c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(NULL, item); 3836c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) item = *iter; 3837c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 3838c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 3839c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(item); 3840c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 38412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedCancellingItem canceller(item); 38422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wait for the onCreated and onDeterminingFilename event. 38445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, 38455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 38465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"danger\": \"safe\"," 38475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 38485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"id\": %d," 38495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mime\": \"application/octet-stream\"," 38505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"paused\": false}]", 38515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 38525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnDeterminingFilename::kEventName, 38535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 38545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 38555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"incognito\": false," 38565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\":\"download-unknown-size\"}]", 38575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 38582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(item->GetTargetFilePath().empty()); 385990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 38602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3861c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClearEvents(); 3862c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 3863c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) current_browser(), 3864c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(URLRequestSlowDownloadJob::kErrorDownloadUrl), 3865c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NEW_BACKGROUND_TAB, 3866c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 38672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3868c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Errors caught before filename determination are delayed until after 3869c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // filename determination. 38702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 38712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 38722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_browser()->profile(), 38732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 38742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetExtensionId(), 3875c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) item->GetId(), 38762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("42.txt")), 38775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 38785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu &error)) 38795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu << error; 38802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("", error); 38815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 38825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 38835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 38845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"filename\": {" 38855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"\"," 38865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"%s\"}}]", 38875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId(), 38885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetFilename("42.txt").c_str()))); 38892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3890c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::DownloadUpdatedObserver interrupted(item, base::Bind( 3891c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ItemIsInterrupted)); 3892c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(interrupted.WaitForEvent()); 38935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 38945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 38955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 38965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"error\":{\"current\":\"NETWORK_FAILED\"}," 38975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\":{" 38985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\":\"in_progress\"," 38995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\":\"interrupted\"}}]", 39005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 3901c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3902c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClearEvents(); 3903a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Downloads that are restarted on resumption trigger another download target 3904a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // determination. 3905a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) RemoveFilenameDeterminer(host); 3906a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) item->Resume(); 3907c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Errors caught before filename determination is complete are delayed until 3909c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // after filename determination so that, on resumption, filename determination 3910c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // does not need to be re-done. So, there will not be a second 3911c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onDeterminingFilename event. 3912c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 39145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 39155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 39165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"error\":{\"previous\":\"NETWORK_FAILED\"}," 39175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\":{" 39185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\":\"interrupted\"," 39195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\":\"in_progress\"}}]", 39205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 3921c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3922c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClearEvents(); 3923c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FinishPendingSlowDownloads(); 3924c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The download should complete successfully. 39265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 39275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 39285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d," 39295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"state\": {" 39305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"in_progress\"," 39315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"complete\"}}]", 39325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item->GetId()))); 39332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 39342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3935a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 3936a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DownloadExtensionTest_SetShelfEnabled) { 3937a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) LoadExtension("downloads_split"); 3938a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsSetShelfEnabledFunction(), "[false]")); 3939a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(DownloadServiceFactory::GetForBrowserContext( 3940a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser()->profile())->IsShelfEnabled()); 3941a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(RunFunction(new DownloadsSetShelfEnabledFunction(), "[true]")); 3942a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(DownloadServiceFactory::GetForBrowserContext( 3943a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser()->profile())->IsShelfEnabled()); 3944a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test that existing shelves are hidden. 3945a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test multiple extensions. 3946a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test disabling extensions. 3947a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test that browsers associated with other profiles are not 3948a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // affected. 3949a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(benjhayden) Test incognito. 3950a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 3951a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 39522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(benjhayden) Figure out why DisableExtension() does not fire 39532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OnListenerRemoved. 3954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(benjhayden) Test that the shelf is shown for download() both with and 3956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// without a WebContents. 3957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3958424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void OnDangerPromptCreated(DownloadDangerPrompt* prompt) { 3959424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) prompt->InvokeActionForTesting(DownloadDangerPrompt::ACCEPT); 3960424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 3961424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 39625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_MACOSX) 39635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Flakily triggers and assert on Mac. 39645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// http://crbug.com/180759 39655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MAYBE_DownloadExtensionTest_AcceptDanger DownloadExtensionTest_AcceptDanger 39665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 39675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MAYBE_DownloadExtensionTest_AcceptDanger DISABLED_DownloadExtensionTest_AcceptDanger 39685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 3969424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 39705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MAYBE_DownloadExtensionTest_AcceptDanger) { 3971424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Download a file that will be marked dangerous; click the browser action 3972424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // button; the browser action poup will call acceptDanger(); when the 3973424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // DownloadDangerPrompt is created, pretend that the user clicks the Accept 3974424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // button; wait until the download completes. 3975424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) LoadExtension("downloads_split"); 3976424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 3977424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new DownloadsDownloadFunction(), 3978424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[{\"url\": \"data:,\", \"filename\": \"dangerous.swf\"}]")); 3979424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(result.get()); 3980424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int result_id = -1; 3981424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(result->GetAsInteger(&result_id)); 3982424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 3983424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(item); 39845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(WaitFor(downloads::OnChanged::kEventName, 39855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::StringPrintf( 39865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "[{\"id\": %d, " 39875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"danger\": {" 39885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"previous\": \"safe\"," 39895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"current\": \"file\"}}]", 39905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result_id))); 3991424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(item->IsDangerous()); 3992424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ScopedCancellingItem canceller(item); 3993424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<content::DownloadTestObserver> observer( 3994424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new content::DownloadTestObserverTerminal( 3995424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) GetCurrentManager(), 1, 3996424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_IGNORE)); 3997424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DownloadsAcceptDangerFunction::OnPromptCreatedCallback callback = 3998424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Bind(&OnDangerPromptCreated); 3999424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DownloadsAcceptDangerFunction::OnPromptCreatedForTesting( 4000424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) &callback); 4001424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) BrowserActionTestUtil(browser()).Press(0); 4002424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) observer->WaitForFinished(); 4003424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 4004424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 4005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DownloadsApiTest : public ExtensionApiTest { 4006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 4007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DownloadsApiTest() {} 4008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~DownloadsApiTest() {} 4009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 4010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadsApiTest); 4011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 4012c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4014c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DownloadsApiTest, DownloadsApiTest) { 4015c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunExtensionTest("downloads")) << message_; 4016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 4017558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 4018558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST(DownloadInterruptReasonEnumsSynced, 4019558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DownloadInterruptReasonEnumsSynced) { 40205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define INTERRUPT_REASON(name, value) \ 40215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(InterruptReasonContentToExtension( \ 40225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::DOWNLOAD_INTERRUPT_REASON_##name), \ 40235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::INTERRUPT_REASON_##name); \ 40245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ( \ 40255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu InterruptReasonExtensionToContent(downloads::INTERRUPT_REASON_##name), \ 4026558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch content::DOWNLOAD_INTERRUPT_REASON_##name); 4027558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "content/public/browser/download_interrupt_reason_values.h" 4028558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#undef INTERRUPT_REASON 4029558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 4030ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4031ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochTEST(ExtensionDetermineDownloadFilenameInternal, 4032ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionDetermineDownloadFilenameInternal) { 4033ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string winner_id; 4034ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FilePath filename; 40355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FilenameConflictAction conflict_action = 40365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY; 4037cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtensionWarningSet warnings; 4038ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4039ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Empty incumbent determiner 4040ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.clear(); 4041ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionDownloadsEventRouter::DetermineFilenameInternal( 4042ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FilePath(FILE_PATH_LITERAL("a")), 40435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 4044ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "suggester", 4045ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now(), 4046ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "", 4047ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time(), 4048ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &winner_id, 4049ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &filename, 4050ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &conflict_action, 4051ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &warnings); 4052ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("suggester", winner_id); 4053ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ(FILE_PATH_LITERAL("a"), filename.value()); 40545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, conflict_action); 4055ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(warnings.empty()); 4056ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4057ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Incumbent wins 4058ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.clear(); 4059ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionDownloadsEventRouter::DetermineFilenameInternal( 4060ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FilePath(FILE_PATH_LITERAL("b")), 40615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_PROMPT, 4062ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "suggester", 4063ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now() - base::TimeDelta::FromDays(1), 4064ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "incumbent", 4065ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now(), 4066ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &winner_id, 4067ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &filename, 4068ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &conflict_action, 4069ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &warnings); 4070ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("incumbent", winner_id); 4071ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ(FILE_PATH_LITERAL("a"), filename.value()); 40725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, conflict_action); 4073ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_FALSE(warnings.empty()); 4074cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(ExtensionWarning::kDownloadFilenameConflict, 4075ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.begin()->warning_type()); 4076ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("suggester", warnings.begin()->extension_id()); 4077ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4078ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Suggester wins 4079ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.clear(); 4080ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionDownloadsEventRouter::DetermineFilenameInternal( 4081ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FilePath(FILE_PATH_LITERAL("b")), 40825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu downloads::FILENAME_CONFLICT_ACTION_PROMPT, 4083ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "suggester", 4084ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now(), 4085ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "incumbent", 4086ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time::Now() - base::TimeDelta::FromDays(1), 4087ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &winner_id, 4088ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &filename, 4089ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &conflict_action, 4090ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &warnings); 4091ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("suggester", winner_id); 4092ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ(FILE_PATH_LITERAL("b"), filename.value()); 40935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(downloads::FILENAME_CONFLICT_ACTION_PROMPT, conflict_action); 4094ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_FALSE(warnings.empty()); 4095cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(ExtensionWarning::kDownloadFilenameConflict, 4096ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch warnings.begin()->warning_type()); 4097ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ("incumbent", warnings.begin()->extension_id()); 4098ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 4099f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace extensions 41015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // http://crbug.com/3061144 4103