15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/save_package.h" 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/content_browser_test.h" 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/content_browser_test_utils.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestFile[] = "files/simple_page.html"; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SavePackageBrowserTest : public ContentBrowserTest { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(save_dir_.CreateUniqueTempDir()); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentBrowserTest::SetUp(); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns full paths of destination file and directory. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetDestinationPaths(const std::string& prefix, 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath* full_file_name, 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath* dir) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *full_file_name = save_dir_.path().AppendASCII(prefix + ".htm"); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *dir = save_dir_.path().AppendASCII(prefix + "_files"); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Temporary directory we will save pages to. 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir save_dir_; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create a SavePackage and delete it without calling Init. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SavePackage dtor has various asserts/checks that should not fire. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SavePackageBrowserTest, ImplicitCancel) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = test_server()->GetURL(kTestFile); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToURL(shell(), url); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath full_file_name, dir; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetDestinationPaths("a", &full_file_name, &dir); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SavePackage> save_package(new SavePackage( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shell()->web_contents(), SAVE_PAGE_TYPE_AS_ONLY_HTML, full_file_name, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dir)); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Stop()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create a SavePackage, call Cancel, then delete it. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SavePackage dtor has various asserts/checks that should not fire. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SavePackageBrowserTest, ExplicitCancel) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = test_server()->GetURL(kTestFile); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToURL(shell(), url); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath full_file_name, dir; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetDestinationPaths("a", &full_file_name, &dir); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SavePackage> save_package(new SavePackage( 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shell()->web_contents(), SAVE_PAGE_TYPE_AS_ONLY_HTML, full_file_name, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dir)); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) save_package->Cancel(true); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Stop()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 64