OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome_frame/bho.h" | 5 #include "chrome_frame/bho.h" |
6 | 6 |
7 #include <shlguid.h> | 7 #include <shlguid.h> |
8 | 8 |
9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 bool ret = false; | 335 bool ret = false; |
336 | 336 |
337 _pAtlModule->m_csStaticDataInitAndTypeInfo.Lock(); | 337 _pAtlModule->m_csStaticDataInitAndTypeInfo.Lock(); |
338 | 338 |
339 if (state_ == UNKNOWN) { | 339 if (state_ == UNKNOWN) { |
340 // If we're going to start patching things for reals, we'd better make sure | 340 // If we're going to start patching things for reals, we'd better make sure |
341 // that we stick around for ever more: | 341 // that we stick around for ever more: |
342 if (!IsUnpinnedMode()) | 342 if (!IsUnpinnedMode()) |
343 PinModule(); | 343 PinModule(); |
344 | 344 |
345 HttpNegotiatePatch::Initialize(); | |
346 | |
347 ProtocolPatchMethod patch_method = GetPatchMethod(); | 345 ProtocolPatchMethod patch_method = GetPatchMethod(); |
348 if (patch_method == PATCH_METHOD_INET_PROTOCOL) { | 346 if (patch_method == PATCH_METHOD_INET_PROTOCOL) { |
349 g_trans_hooks.InstallHooks(); | 347 g_trans_hooks.InstallHooks(); |
350 state_ = PATCH_PROTOCOL; | 348 state_ = PATCH_PROTOCOL; |
351 } else if (patch_method == PATCH_METHOD_IBROWSER) { | 349 } else if (patch_method == PATCH_METHOD_IBROWSER) { |
| 350 HttpNegotiatePatch::Initialize(); |
352 state_ = PATCH_IBROWSER; | 351 state_ = PATCH_IBROWSER; |
353 } else { | 352 } else { |
354 DCHECK(patch_method == PATCH_METHOD_MONIKER); | 353 DCHECK(patch_method == PATCH_METHOD_MONIKER); |
355 state_ = PATCH_MONIKER; | 354 state_ = PATCH_MONIKER; |
| 355 HttpNegotiatePatch::Initialize(); |
356 MonikerPatch::Initialize(); | 356 MonikerPatch::Initialize(); |
357 } | 357 } |
358 | 358 |
359 ret = true; | 359 ret = true; |
360 } | 360 } |
361 | 361 |
362 _pAtlModule->m_csStaticDataInitAndTypeInfo.Unlock(); | 362 _pAtlModule->m_csStaticDataInitAndTypeInfo.Unlock(); |
363 | 363 |
364 return ret; | 364 return ret; |
365 } | 365 } |
366 | 366 |
367 void PatchHelper::PatchBrowserService(IBrowserService* browser_service) { | 367 void PatchHelper::PatchBrowserService(IBrowserService* browser_service) { |
368 DCHECK(state_ == PATCH_IBROWSER); | 368 DCHECK(state_ == PATCH_IBROWSER); |
369 if (!IS_PATCHED(IBrowserService)) { | 369 if (!IS_PATCHED(IBrowserService)) { |
370 vtable_patch::PatchInterfaceMethods(browser_service, | 370 vtable_patch::PatchInterfaceMethods(browser_service, |
371 IBrowserService_PatchInfo); | 371 IBrowserService_PatchInfo); |
372 } | 372 } |
373 } | 373 } |
374 | 374 |
375 void PatchHelper::UnpatchIfNeeded() { | 375 void PatchHelper::UnpatchIfNeeded() { |
376 if (state_ == PATCH_PROTOCOL) { | 376 if (state_ == PATCH_PROTOCOL) { |
377 g_trans_hooks.RevertHooks(); | 377 g_trans_hooks.RevertHooks(); |
378 } else if (state_ == PATCH_IBROWSER) { | 378 } else if (state_ == PATCH_IBROWSER) { |
379 vtable_patch::UnpatchInterfaceMethods(IBrowserService_PatchInfo); | 379 vtable_patch::UnpatchInterfaceMethods(IBrowserService_PatchInfo); |
380 MonikerPatch::Uninitialize(); | 380 MonikerPatch::Uninitialize(); |
| 381 HttpNegotiatePatch::Uninitialize(); |
| 382 } else { |
| 383 HttpNegotiatePatch::Uninitialize(); |
381 } | 384 } |
382 | 385 |
383 HttpNegotiatePatch::Uninitialize(); | |
384 | |
385 state_ = UNKNOWN; | 386 state_ = UNKNOWN; |
386 } | 387 } |
387 | 388 |
OLD | NEW |