diff options
Diffstat (limited to 'mojo/public/cpp/bindings/sync_call_restrictions.h')
-rw-r--r-- | mojo/public/cpp/bindings/sync_call_restrictions.h | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/mojo/public/cpp/bindings/sync_call_restrictions.h b/mojo/public/cpp/bindings/sync_call_restrictions.h deleted file mode 100644 index 5529042..0000000 --- a/mojo/public/cpp/bindings/sync_call_restrictions.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MOJO_PUBLIC_CPP_BINDINGS_SYNC_CALL_RESTRICTIONS_H_ -#define MOJO_PUBLIC_CPP_BINDINGS_SYNC_CALL_RESTRICTIONS_H_ - -#include "base/macros.h" -#include "base/threading/thread_restrictions.h" -#include "mojo/public/cpp/bindings/bindings_export.h" - -#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) -#define ENABLE_SYNC_CALL_RESTRICTIONS 1 -#else -#define ENABLE_SYNC_CALL_RESTRICTIONS 0 -#endif - -namespace leveldb { -class LevelDBMojoProxy; -} - -namespace prefs { -class PersistentPrefStoreClient; -} - -namespace ui { -class Gpu; -} - -namespace views { -class ClipboardMus; -} - -namespace mojo { - -// In some processes, sync calls are disallowed. For example, in the browser -// process we don't want any sync calls to child processes for performance, -// security and stability reasons. SyncCallRestrictions helps to enforce such -// rules. -// -// Before processing a sync call, the bindings call -// SyncCallRestrictions::AssertSyncCallAllowed() to check whether sync calls are -// allowed. By default, it is determined by the mojo system property -// MOJO_PROPERTY_SYNC_CALL_ALLOWED. If the default setting says no but you have -// a very compelling reason to disregard that (which should be very very rare), -// you can override it by constructing a ScopedAllowSyncCall object, which -// allows making sync calls on the current thread during its lifetime. -class MOJO_CPP_BINDINGS_EXPORT SyncCallRestrictions { - public: -#if ENABLE_SYNC_CALL_RESTRICTIONS - // Checks whether the current thread is allowed to make sync calls, and causes - // a DCHECK if not. - static void AssertSyncCallAllowed(); -#else - // Inline the empty definitions of functions so that they can be compiled out. - static void AssertSyncCallAllowed() {} -#endif - - private: - // DO NOT ADD ANY OTHER FRIEND STATEMENTS, talk to mojo/OWNERS first. - // BEGIN ALLOWED USAGE. - friend class ui::Gpu; // http://crbug.com/620058 - // LevelDBMojoProxy makes same-process sync calls from the DB thread. - friend class leveldb::LevelDBMojoProxy; - // Pref service connection is sync at startup. - friend class prefs::PersistentPrefStoreClient; - - // END ALLOWED USAGE. - - // BEGIN USAGE THAT NEEDS TO BE FIXED. - // In the non-mus case, we called blocking OS functions in the ui::Clipboard - // implementation which weren't caught by sync call restrictions. Our blocking - // calls to mus, however, are. - friend class views::ClipboardMus; - // END USAGE THAT NEEDS TO BE FIXED. - -#if ENABLE_SYNC_CALL_RESTRICTIONS - static void IncreaseScopedAllowCount(); - static void DecreaseScopedAllowCount(); -#else - static void IncreaseScopedAllowCount() {} - static void DecreaseScopedAllowCount() {} -#endif - - // If a process is configured to disallow sync calls in general, constructing - // a ScopedAllowSyncCall object temporarily allows making sync calls on the - // current thread. Doing this is almost always incorrect, which is why we - // limit who can use this through friend. If you find yourself needing to use - // this, talk to mojo/OWNERS. - class ScopedAllowSyncCall { - public: - ScopedAllowSyncCall() { IncreaseScopedAllowCount(); } - ~ScopedAllowSyncCall() { DecreaseScopedAllowCount(); } - - private: -#if ENABLE_SYNC_CALL_RESTRICTIONS - base::ThreadRestrictions::ScopedAllowWait allow_wait_; -#endif - - DISALLOW_COPY_AND_ASSIGN(ScopedAllowSyncCall); - }; - - DISALLOW_IMPLICIT_CONSTRUCTORS(SyncCallRestrictions); -}; - -} // namespace mojo - -#endif // MOJO_PUBLIC_CPP_BINDINGS_SYNC_CALL_RESTRICTIONS_H_ |