17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_DIR_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_DIR_H_
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/files/file_path.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/files/scoped_temp_dir.h"
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/strings/string_piece.h"
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace extensions {
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Provides a temporary directory to build an extension into.  This lets all of
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// an extension's code live inside the test instead of in a separate directory.
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass TestExtensionDir {
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  TestExtensionDir();
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ~TestExtensionDir();
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Writes |manifest| to manifest.json within the unpacked dir.  No validation
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // is performed. If desired this should be done on extension installation.
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void WriteManifest(base::StringPiece manifest);
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Writes |contents| to |filename| within the unpacked dir, overwriting
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // anything that was already there.
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void WriteFile(const base::FilePath::StringType& filename,
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                 base::StringPiece contents);
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Packs the extension into a .crx, and returns the path to that
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // .crx. Multiple calls to Pack() will produce extensions with the same ID.
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::FilePath Pack();
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Returns the path to the unpacked directory.
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::FilePath unpacked_path() {
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return dir_.path();
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private:
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Stores files that make up the extension.
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::ScopedTempDir dir_;
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Stores the generated .crx and .pem.
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::ScopedTempDir crx_dir_;
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace extensions
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_DIR_H_
51