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