Index: chrome_frame/exception_barrier.h |
diff --git a/chrome_frame/exception_barrier.h b/chrome_frame/exception_barrier.h |
deleted file mode 100644 |
index e3e5350262dcb45e28034848c0bf8184796a7737..0000000000000000000000000000000000000000 |
--- a/chrome_frame/exception_barrier.h |
+++ /dev/null |
@@ -1,196 +0,0 @@ |
-// Copyright (c) 2009 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. |
-// |
-// A class to make it easy to tag exception propagation boundaries and |
-// get crash reports of exceptions that pass over same. |
-// |
-// An exception barrier is used to report exceptions that pass through |
-// a boundary where exceptions shouldn't pass, such as e.g. COM interface |
-// boundaries. |
-// This is handy for any kind of plugin code, where if the exception passes |
-// through unhindered, it'll either be swallowed by an SEH exception handler |
-// above us on the stack, or be reported as an unhandled exception for |
-// the application hosting the plugin code. |
-// |
-// IMPORTANT NOTE: This class has crash_reporting disabled by default. To |
-// enable crash reporting call: |
-// |
-// @code |
-// ExceptionBarrierBase::set_crash_handling(true) |
-// @endcode |
-// |
-// somewhere in your initialization code. |
-// |
-// Then, to use this class, simply instantiate an ExceptionBarrier just inside |
-// the code boundary, like this: |
-// @code |
-// HRESULT SomeObject::SomeCOMMethod(...) { |
-// ExceptionBarrier report_crashes; |
-// |
-// ... other code here ... |
-// } |
-// @endcode |
-// |
-// There are three ExceptionBarrier types defined here: |
-// 1) ExceptionBarrier which reports all crashes it sees. |
-// 2) ExceptionBarrierReportOnlyModule which reports only crashes occurring |
-// in this module. |
-// 3) ExceptionBarrierCustomHandler which calls the handler set by a call |
-// to ExceptionBarrierCallCustomHandler::set_custom_handler(). Note that |
-// there is one custom handler for all ExceptionBarrierCallCustomHandler |
-// instances. If set_custom_handler() is never called, this places an |
-// SEH in the chain that just returns ExceptionContinueSearch. |
- |
-#ifndef CHROME_FRAME_EXCEPTION_BARRIER_H_ |
-#define CHROME_FRAME_EXCEPTION_BARRIER_H_ |
- |
-#include <windows.h> |
- |
-extern "C" IMAGE_DOS_HEADER __ImageBase; |
- |
-// This is the type dictated for an exception handler by the platform ABI |
-// @see _except_handler in excpt.h |
-typedef EXCEPTION_DISPOSITION (__cdecl* ExceptionHandlerFunc)( |
- struct _EXCEPTION_RECORD* exception_record, |
- void* establisher_frame, |
- struct _CONTEXT* context, |
- void* reserved); |
- |
-// The type of an exception record in the exception handler chain |
-struct EXCEPTION_REGISTRATION { |
- EXCEPTION_REGISTRATION* prev; |
- ExceptionHandlerFunc handler; |
-}; |
- |
-// This is our raw exception handler, it must be declared extern "C" to |
-// match up with the SAFESEH declaration in our corresponding ASM file. |
-extern "C" EXCEPTION_DISPOSITION __cdecl |
-ExceptionBarrierHandler(struct _EXCEPTION_RECORD* exception_record, |
- void* establisher_frame, |
- struct _CONTEXT* context, |
- void* reserved); |
- |
-// An alternate raw exception handler that reports crashes only for the current |
-// module. It must be declared extern "C" to match up with the SAFESEH |
-// declaration in our corresponding ASM file. |
-extern "C" EXCEPTION_DISPOSITION __cdecl |
-ExceptionBarrierReportOnlyModuleHandler( |
- struct _EXCEPTION_RECORD* exception_record, |
- void* establisher_frame, |
- struct _CONTEXT* context, |
- void* reserved); |
- |
-// An alternate raw exception handler that calls out to a custom handler. |
-// It must be declared extern "C" to match up with the SAFESEH declaration in |
-// our corresponding ASM file. |
-extern "C" EXCEPTION_DISPOSITION __cdecl |
-ExceptionBarrierCallCustomHandler( |
- struct _EXCEPTION_RECORD* exception_record, |
- void* establisher_frame, |
- struct _CONTEXT* context, |
- void* reserved); |
- |
- |
-// @name These are implemented in the associated .asm file |
-// @{ |
-extern "C" void WINAPI RegisterExceptionRecord( |
- EXCEPTION_REGISTRATION* registration, |
- ExceptionHandlerFunc func); |
-extern "C" void WINAPI UnregisterExceptionRecord( |
- EXCEPTION_REGISTRATION* registration); |
-// @} |
- |
- |
-// Traits classes for ExceptionBarrierT. |
-class EBTraitsBase { |
- public: |
- static void UnregisterException(EXCEPTION_REGISTRATION* registration) { |
- UnregisterExceptionRecord(registration); |
- } |
-}; |
- |
-class EBReportAllTraits : public EBTraitsBase { |
- public: |
- static void RegisterException(EXCEPTION_REGISTRATION* registration) { |
- RegisterExceptionRecord(registration, ExceptionBarrierHandler); |
- } |
-}; |
- |
-class EBReportOnlyThisModuleTraits : public EBTraitsBase { |
- public: |
- static void RegisterException(EXCEPTION_REGISTRATION* registration) { |
- RegisterExceptionRecord(registration, |
- ExceptionBarrierReportOnlyModuleHandler); |
- } |
-}; |
- |
-class EBCustomHandlerTraits : public EBTraitsBase { |
- public: |
- static void RegisterException(EXCEPTION_REGISTRATION* registration) { |
- RegisterExceptionRecord(registration, |
- ExceptionBarrierCallCustomHandler); |
- } |
-}; |
- |
-class ExceptionBarrierConfig { |
- public: |
- // Used to globally enable or disable crash handling by ExceptionBarrierBase |
- // instances. |
- static void set_enabled(bool enabled) { |
- s_enabled_ = enabled; |
- } |
- static bool enabled() { return s_enabled_; } |
- |
- // Whether crash reports are enabled. |
- static bool s_enabled_; |
-}; |
- |
-template <typename RegistrarTraits> |
-class ExceptionBarrierT { |
- public: |
- // Register the barrier in the SEH chain |
- ExceptionBarrierT() { |
- RegistrarTraits::RegisterException(®istration_); |
- } |
- |
- // Unregister on destruction |
- virtual ~ExceptionBarrierT() { |
- RegistrarTraits::UnregisterException(®istration_); |
- } |
- |
- protected: |
- // Our SEH frame |
- EXCEPTION_REGISTRATION registration_; |
-}; |
- |
-// This class allows for setting a custom exception handler function. The |
-// handler is shared among all instances. This class is intended to enable |
-// testing of the SEH registration. |
-template <typename RegistrarTraits> |
-class ExceptionBarrierCustomHandlerT : |
- public ExceptionBarrierT<typename RegistrarTraits> { |
- public: |
- // Signature of the handler function which gets notified when |
- // an exception propagates through a barrier. |
- typedef void (CALLBACK* CustomExceptionHandler)(EXCEPTION_POINTERS* ptrs); |
- |
- // Used to set a global custom handler used by all |
- // ExceptionBarrierCustomHandler instances. |
- static void set_custom_handler(CustomExceptionHandler handler) { |
- s_custom_handler_ = handler; |
- } |
- static CustomExceptionHandler custom_handler() { return s_custom_handler_; } |
- |
- private: |
- static CustomExceptionHandler s_custom_handler_; |
-}; |
- |
-// Convenience typedefs for the ExceptionBarrierT specializations. |
-typedef ExceptionBarrierT<EBReportAllTraits> ExceptionBarrier; |
-typedef ExceptionBarrierT<EBReportOnlyThisModuleTraits> |
- ExceptionBarrierReportOnlyModule; |
-typedef ExceptionBarrierCustomHandlerT<EBCustomHandlerTraits> |
- ExceptionBarrierCustomHandler; |
- |
-#endif // CHROME_FRAME_EXCEPTION_BARRIER_H_ |