Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Unified Diff: chrome_frame/vtable_patch_manager.h

Issue 259025: Add the chromeframe tag to the user agent header at runtime instead of static... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/utils.h ('k') | chrome_frame/vtable_patch_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/vtable_patch_manager.h
===================================================================
--- chrome_frame/vtable_patch_manager.h (revision 29337)
+++ chrome_frame/vtable_patch_manager.h (working copy)
@@ -2,11 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_FRAME_COMMON_VTABLE_PATCH_MANAGER_H_
-#define CHROME_FRAME_COMMON_VTABLE_PATCH_MANAGER_H_
+#ifndef CHROME_FRAME_VTABLE_PATCH_MANAGER_H_
+#define CHROME_FRAME_VTABLE_PATCH_MANAGER_H_
#include <windows.h>
+#include <list>
+
+#include "base/lock.h"
+
struct FunctionStub;
// This namespace provides methods to patch VTable methods of COM interfaces.
namespace vtable_patch {
@@ -39,13 +43,46 @@
// The last entry of patches must have index_ set to -1.
HRESULT UnpatchInterfaceMethods(MethodPatchInfo* patches);
+// Disabled as we're not using it atm.
+#if 0
+// Used when dynamically patching zero or more (usually more than 1)
+// implementations of a particular interface.
+class DynamicPatchManager {
+ public:
+ explicit DynamicPatchManager(const MethodPatchInfo* patch_prototype);
+ ~DynamicPatchManager();
+
+ // Returns S_OK if the object was successfully patched, S_FALSE if it was
+ // already patched or an error value if something bad happened.
+ HRESULT PatchObject(void* unknown);
+
+ bool UnpatchAll();
+
+ protected:
+ struct PatchedObject {
+ void* vtable_;
+ MethodPatchInfo patch_info_[1];
+
+ // Used to match PatchedObject instances based on the vtable when
+ // searching through the patch list.
+ bool operator==(const PatchedObject& that) const {
+ return vtable_ == that.vtable_;
+ }
+ };
+
+ typedef std::list<PatchedObject*> PatchList;
+ const MethodPatchInfo* patch_prototype_;
+ mutable Lock patch_list_lock_;
+ PatchList patch_list_;
+};
+#endif // disable DynamicPatchManager
+
} // namespace vtable_patch
// Begins the declaration of a VTable patch
// @param IFName The name of the interface to patch
#define BEGIN_VTABLE_PATCHES(IFName) \
vtable_patch::MethodPatchInfo IFName##_PatchInfo[] = {
-
// Defines a single method patch in a VTable
// @param index The index of the method to patch
// @param PatchFunction The patch function
@@ -55,10 +92,27 @@
NULL, \
},
+#define DCHECK_IS_NOT_PATCHED(IFName) \
+ for (vtable_patch::MethodPatchInfo* it = IFName##_PatchInfo; \
+ it->index_ != -1; ++it) { \
+ DCHECK(it->stub_ == NULL); \
+ }
+
+#define DCHECK_IS_PATCHED(IFName) \
+ for (vtable_patch::MethodPatchInfo* it = IFName##_PatchInfo; \
+ it->index_ != -1; ++it) { \
+ DCHECK(it->stub_ != NULL); \
+ }
+
+// Checks if the interface is patched. Note that only the first method
+// is checked and subsequent methods are assumed to have the same state.
+#define IS_PATCHED(IFName) \
+ (IFName##_PatchInfo[0].stub_ != NULL)
+
// Ends the declaration of a VTable patch by adding an entry with
// index set to -1.
#define END_VTABLE_PATCHES() \
-1, NULL, NULL \
};
-#endif // CHROME_FRAME_COMMON_VTABLE_PATCH_MANAGER_H_
+#endif // CHROME_FRAME_VTABLE_PATCH_MANAGER_H_
Property changes on: chrome_frame\vtable_patch_manager.h
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome_frame/utils.h ('k') | chrome_frame/vtable_patch_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698