15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_permissions.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_switches.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)PpapiPermissions::PpapiPermissions() : permissions_(0) {}
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)PpapiPermissions::PpapiPermissions(uint32 perms) : permissions_(perms) {}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)PpapiPermissions::~PpapiPermissions() {}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PpapiPermissions PpapiPermissions::AllPermissions() {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PpapiPermissions(PERMISSION_ALL_BITS);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PpapiPermissions PpapiPermissions::GetForCommandLine(uint32 base_perms) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 additional_permissions = 0;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_NACL)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Testing permissions. The testing flag implies all permissions since the
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // test plugin needs to test all interfaces.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (CommandLine::ForCurrentProcess()->HasSwitch(
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          switches::kEnablePepperTesting))
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    additional_permissions |= ppapi::PERMISSION_ALL_BITS;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PpapiPermissions(base_perms | additional_permissions);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PpapiPermissions::HasPermission(Permission perm) const {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that "perm" is a power of two to make sure the caller didn't set
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // more than one permission bit. We may want to change how permissions are
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // represented in the future so don't want callers making assumptions about
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bits.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 perm_int = static_cast<uint32>(perm);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!perm_int)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;  // You always have "no permission".
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK((perm_int & (perm_int - 1)) == 0);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return !!(permissions_ & perm_int);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ppapi
52