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)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Download code which handles CRX files (extensions, themes, apps, ...). 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_CRX_UTIL_H_ 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_CRX_UTIL_H_ 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/memory/scoped_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionInstallPrompt; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadItem; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CrxInstaller; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace download_crx_util { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Allow tests to install a mock ExtensionInstallPrompt object, to fake 29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// user clicks on the permissions dialog. 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid SetMockInstallPromptForTesting( 31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_ptr<ExtensionInstallPrompt> mock_prompt); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Create and pre-configure a CrxInstaller for a given |download_item|. 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochscoped_refptr<extensions::CrxInstaller> CreateCrxInstaller( 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Profile* profile, 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const content::DownloadItem& download_item); 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Start installing a downloaded item item as a CRX (extension, theme, app, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ...). The installer does work on the file thread, so the installation 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is not complete when this function returns. Returns the object managing 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the installation. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<extensions::CrxInstaller> OpenChromeExtension( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::DownloadItem& download_item); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if this is an extension download. This also considers user 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// scripts to be extension downloads, since we convert those automatically. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsExtensionDownload(const content::DownloadItem& download_item); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Checks whether an extension download should be allowed to proceed because the 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// installation site is whitelisted in prefs. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool OffStoreInstallAllowedByPrefs(Profile* profile, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::DownloadItem& item); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace download_crx_util 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_CRX_UTIL_H_ 58