1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef EXTENSIONS_COMMON_PERMISSIONS_MEDIA_GALLERIES_PERMISSION_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define EXTENSIONS_COMMON_PERMISSIONS_MEDIA_GALLERIES_PERMISSION_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "extensions/common/permissions/api_permission.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/media_galleries_permission_data.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/set_disjunction_permission.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Media Galleries permissions are as follows:
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//   <media-galleries-permission-pattern>
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//             := <access> | <access> 'allAutoDetected' | 'allAutoDetected' |
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//                <access> 'scan' | 'scan'
198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)//   <access>  := 'read' | 'read' <access> | 'read' <secondary-access>
208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)//   <secondary-access>
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//             := 'delete' | 'delete' <secondary-access> |
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//                'delete' <tertiary-access>
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//   <tertiary-access>
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//             := 'copyTo' | 'copyTo' <tertiary-access>
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaGalleriesPermission
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  : public SetDisjunctionPermission<MediaGalleriesPermissionData,
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                    MediaGalleriesPermission> {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct CheckParam : public APIPermission::CheckParam {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    explicit CheckParam(const std::string& permission)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : permission(permission) {}
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string permission;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit MediaGalleriesPermission(const APIPermissionInfo* info);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~MediaGalleriesPermission();
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // SetDisjunctionPermission overrides.
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // MediaGalleriesPermission does additional checks to make sure the
40558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // permissions do not contain unknown values.
41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual bool FromValue(
42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      const base::Value* value,
43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      std::string* error,
44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      std::vector<std::string>* unhandled_permissions) OVERRIDE;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // APIPermission overrides.
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual PermissionMessages GetMessages() const OVERRIDE;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Permission strings.
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kAllAutoDetectedPermission[];
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static const char kScanPermission[];
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kReadPermission[];
53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  static const char kCopyToPermission[];
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static const char kDeletePermission[];
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // EXTENSIONS_COMMON_PERMISSIONS_MEDIA_GALLERIES_PERMISSION_H_
60