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