15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef EXTENSIONS_COMMON_MANIFEST_HANDLERS_WEBVIEW_INFO_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define EXTENSIONS_COMMON_MANIFEST_HANDLERS_WEBVIEW_INFO_H_
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <string>
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_vector.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handler.h"
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace extensions {
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PartitionItem;
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A class to hold the <webview> accessible extension resources
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// that may be specified in the manifest of an extension using the
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// "webview" key.
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WebviewInfo : public Extension::ManifestData {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Define out of line constructor/destructor to please Clang.
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebviewInfo();
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~WebviewInfo();
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Returns true if the specified resource is web accessible.
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static bool IsResourceWebviewAccessible(const Extension* extension,
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                          const std::string& partition_id,
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                          const std::string& relative_path);
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void AddPartitionItem(scoped_ptr<PartitionItem> item);
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ScopedVector<PartitionItem> partition_items_;
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Parses the "webview" manifest key.
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class WebviewHandler : public ManifestHandler {
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebviewHandler();
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~WebviewHandler();
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE;
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private:
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual const std::vector<std::string> Keys() const OVERRIDE;
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebviewHandler);
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace extensions
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // EXTENSIONS_COMMON_MANIFEST_HANDLERS_WEBVIEW_INFO_H_
55