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