• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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 #include "chrome/browser/extensions/test_extension_dir.h"
6 
7 #include "base/files/file_util.h"
8 #include "base/json/json_writer.h"
9 #include "base/numerics/safe_conversions.h"
10 #include "base/test/values_test_util.h"
11 #include "chrome/browser/extensions/extension_creator.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 
14 namespace extensions {
15 
TestExtensionDir()16 TestExtensionDir::TestExtensionDir() {
17   EXPECT_TRUE(dir_.CreateUniqueTempDir());
18   EXPECT_TRUE(crx_dir_.CreateUniqueTempDir());
19 }
20 
~TestExtensionDir()21 TestExtensionDir::~TestExtensionDir() {
22 }
23 
WriteManifest(base::StringPiece manifest)24 void TestExtensionDir::WriteManifest(base::StringPiece manifest) {
25   // TODO(kalman): Write some more convenient way to specify a manifest than
26   // via JSON, which requires awkwardly escaping all quotes. E.g. add a feature
27   // to JSONReader that can parse '' literals rather than "".
28   WriteFile(FILE_PATH_LITERAL("manifest.json"), manifest);
29 }
30 
WriteFile(const base::FilePath::StringType & filename,base::StringPiece contents)31 void TestExtensionDir::WriteFile(const base::FilePath::StringType& filename,
32                                  base::StringPiece contents) {
33   EXPECT_EQ(
34       base::checked_cast<int>(contents.size()),
35       base::WriteFile(
36           dir_.path().Append(filename), contents.data(), contents.size()));
37 }
38 
39 // This function packs the extension into a .crx, and returns the path to that
40 // .crx. Multiple calls to Pack() will produce extensions with the same ID.
Pack()41 base::FilePath TestExtensionDir::Pack() {
42   ExtensionCreator creator;
43   base::FilePath crx_path =
44       crx_dir_.path().Append(FILE_PATH_LITERAL("ext.crx"));
45   base::FilePath pem_path =
46       crx_dir_.path().Append(FILE_PATH_LITERAL("ext.pem"));
47   base::FilePath pem_in_path, pem_out_path;
48   if (base::PathExists(pem_path))
49     pem_in_path = pem_path;
50   else
51     pem_out_path = pem_path;
52   if (!creator.Run(dir_.path(),
53                    crx_path,
54                    pem_in_path,
55                    pem_out_path,
56                    ExtensionCreator::kOverwriteCRX)) {
57     ADD_FAILURE()
58         << "ExtensionCreator::Run() failed: " << creator.error_message();
59     return base::FilePath();
60   }
61   if (!base::PathExists(crx_path)) {
62     ADD_FAILURE() << crx_path.value() << " was not created.";
63     return base::FilePath();
64   }
65   return crx_path;
66 }
67 
68 }  // namespace extensions
69