ppapi_permissions.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright (c) 2012 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 "ppapi/shared_impl/ppapi_permissions.h"
6
7#include "base/command_line.h"
8#include "base/logging.h"
9#include "ppapi/shared_impl/ppapi_switches.h"
10
11namespace ppapi {
12
13PpapiPermissions::PpapiPermissions() : permissions_(0) {}
14
15PpapiPermissions::PpapiPermissions(uint32 perms) : permissions_(perms) {}
16
17PpapiPermissions::~PpapiPermissions() {}
18
19// static
20PpapiPermissions PpapiPermissions::AllPermissions() {
21  return PpapiPermissions(PERMISSION_ALL_BITS);
22}
23
24// static
25PpapiPermissions PpapiPermissions::GetForCommandLine(uint32 base_perms) {
26  uint32 additional_permissions = 0;
27
28#if !defined(OS_NACL)
29  // Testing permissions. The testing flag implies all permissions since the
30  // test plugin needs to test all interfaces.
31  if (CommandLine::ForCurrentProcess()->HasSwitch(
32          switches::kEnablePepperTesting))
33    additional_permissions |= ppapi::PERMISSION_ALL_BITS;
34#endif
35
36  return PpapiPermissions(base_perms | additional_permissions);
37}
38
39bool PpapiPermissions::HasPermission(Permission perm) const {
40  // Check that "perm" is a power of two to make sure the caller didn't set
41  // more than one permission bit. We may want to change how permissions are
42  // represented in the future so don't want callers making assumptions about
43  // bits.
44  uint32 perm_int = static_cast<uint32>(perm);
45  if (!perm_int)
46    return true;  // You always have "no permission".
47  DCHECK((perm_int & (perm_int - 1)) == 0);
48  return !!(permissions_ & perm_int);
49}
50
51}  // namespace ppapi
52