1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_EXTERNAL_UPDATE_VALIDATOR_H_ 6#define CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_EXTERNAL_UPDATE_VALIDATOR_H_ 7 8#include <string> 9 10#include "base/files/file_path.h" 11#include "base/memory/weak_ptr.h" 12#include "base/sequenced_task_runner.h" 13#include "chrome/browser/extensions/sandboxed_unpacker.h" 14 15namespace extensions { 16class Extension; 17} 18 19namespace chromeos { 20 21// Delegate class for KioskExternalUpdateValidator, derived class must support 22// WeakPtr. 23class KioskExternalUpdateValidatorDelegate { 24 public: 25 virtual void OnExtenalUpdateUnpackSuccess( 26 const std::string& app_id, 27 const std::string& version, 28 const std::string& min_browser_version, 29 const base::FilePath& temp_dir) = 0; 30 virtual void OnExternalUpdateUnpackFailure(const std::string& app_id) = 0; 31 32 protected: 33 virtual ~KioskExternalUpdateValidatorDelegate() {} 34}; 35 36// Unpacks the crx file of the kiosk app and validates its signature. 37class KioskExternalUpdateValidator 38 : public extensions::SandboxedUnpackerClient { 39 public: 40 KioskExternalUpdateValidator( 41 const scoped_refptr<base::SequencedTaskRunner>& backend_task_runner, 42 const std::string& app_id, 43 const base::FilePath& crx_path, 44 const base::FilePath& crx_unpack_dir, 45 const base::WeakPtr<KioskExternalUpdateValidatorDelegate>& delegate); 46 47 // Starts validating the external crx file. 48 void Start(); 49 50 private: 51 virtual ~KioskExternalUpdateValidator(); 52 53 // SandboxedUnpackerClient overrides. 54 virtual void OnUnpackFailure(const base::string16& error_message) OVERRIDE; 55 virtual void OnUnpackSuccess(const base::FilePath& temp_dir, 56 const base::FilePath& extension_dir, 57 const base::DictionaryValue* original_manifest, 58 const extensions::Extension* extension, 59 const SkBitmap& install_icon) OVERRIDE; 60 61 // Task runner for executing file I/O tasks. 62 const scoped_refptr<base::SequencedTaskRunner> backend_task_runner_; 63 std::string app_id_; 64 65 // The directory where the external crx file resides. 66 base::FilePath crx_dir_; 67 // The temporary directory used by SandBoxedUnpacker for unpacking extensions. 68 const base::FilePath crx_unpack_dir_; 69 70 base::WeakPtr<KioskExternalUpdateValidatorDelegate> delegate_; 71 72 DISALLOW_COPY_AND_ASSIGN(KioskExternalUpdateValidator); 73}; 74 75} // namespace chromeos 76 77#endif // CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_EXTERNAL_UPDATE_VALIDATOR_H_ 78