| Index: chrome_frame/urlmon_moniker.h
|
| diff --git a/chrome_frame/urlmon_moniker.h b/chrome_frame/urlmon_moniker.h
|
| deleted file mode 100644
|
| index ea4729d3365d99a0a5b05cf8f9339e25f04c397e..0000000000000000000000000000000000000000
|
| --- a/chrome_frame/urlmon_moniker.h
|
| +++ /dev/null
|
| @@ -1,198 +0,0 @@
|
| -// Copyright (c) 2010 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 CHROME_FRAME_URLMON_MONIKER_H_
|
| -#define CHROME_FRAME_URLMON_MONIKER_H_
|
| -
|
| -#include <atlbase.h>
|
| -#include <atlcom.h>
|
| -#include <urlmon.h>
|
| -#include <string>
|
| -
|
| -#include "base/lazy_instance.h"
|
| -#include "base/logging.h"
|
| -#include "base/threading/thread_local.h"
|
| -#include "base/win/scoped_variant.h"
|
| -#include "chrome_frame/utils.h"
|
| -
|
| -// This file contains classes that are used to cache the contents of a top-level
|
| -// http request (not for sub frames) while that request is parsed for the
|
| -// presence of a meta tag indicating that the page should be rendered in CF.
|
| -
|
| -// Here are a few scenarios we handle and how the classes come to play.
|
| -
|
| -//
|
| -// Scenario 1: Non CF url navigation through address bar (www.msn.com)
|
| -// - Bho::BeforeNavigate - top level url = www.msn.com
|
| -// - MSHTML -> MonikerPatch::BindToStorage.
|
| -// (IEFrame starts this by calling mshtml!*SuperNavigate*)
|
| -// - check if the url is a top level url
|
| -// - iff the url is a top level url, we switch in our own callback object
|
| -// and hook it up to the bind context (BSCBStorageBind)
|
| -// - otherwise just call the original
|
| -// - BSCBStorageBind::OnDataAvailable - sniffs data and determines that the
|
| -// renderer is not chrome. Goes into pass through mode.
|
| -// - The page loads in mshtml.
|
| -//
|
| -
|
| -//
|
| -// Scenario 2: CF navigation through address bar URL
|
| -// - Bho::BeforeNavigate - top level url = http://wave.google.com/
|
| -// - MSHTML -> MonikerPatch::BindToStorage.
|
| -// (IEFrame starts this by calling mshtml!*SuperNavigate*)
|
| -// - request_data is NULL
|
| -// - check if the url is a top level url
|
| -// - iff the url is a top level url, we switch in our own callback object
|
| -// and hook it up to the bind context (BSCBStorageBind)
|
| -// - BSCBStorageBind::OnDataAvailable - sniffs data and determines that the
|
| -// renderer is chrome. It then registers a special bind context param and
|
| -// sets a magic clip format in the format_etc. Then goes into pass through
|
| -// mode.
|
| -// - mshtml looks at the clip format and re-issues the navigation with the
|
| -// same bind context. Also returns INET_E_TERMINATED_BIND so that same
|
| -// underlying transaction objects are used.
|
| -// - IEFrame -> MonikerPatch::BindToStorage
|
| -// - We check for the special bind context param and instantiate and
|
| -// return our ActiveDoc
|
| -
|
| -//
|
| -// Scenario 3: CF navigation through mshtml link
|
| -// Same as scenario #2.
|
| -//
|
| -
|
| -//
|
| -// Scenario 4: CF navigation through link click in chrome loads non CF page
|
| -// - Link click comes to ChromeActiveDocument::OnOpenURL
|
| -// - web_browser->Navigate with URL
|
| -// - [Scenario 1]
|
| -//
|
| -
|
| -//
|
| -// Scenario 5: CF navigation through link click in chrome loads CF page
|
| -// - Link click comes to ChromeActiveDocument::OnOpenURL
|
| -// - web_browser->Navigate with URL
|
| -// - [Scenario 2]
|
| -//
|
| -
|
| -// This class is the link between a few static, moniker related functions to
|
| -// the bho. The specific services needed by those functions are abstracted into
|
| -// this interface for easier testability.
|
| -class NavigationManager {
|
| - public:
|
| - NavigationManager() {
|
| - }
|
| -
|
| - // Returns the Bho instance for the current thread. This is returned from
|
| - // TLS. Returns NULL if no instance exists on the current thread.
|
| - static NavigationManager* GetThreadInstance();
|
| -
|
| - void RegisterThreadInstance();
|
| - void UnregisterThreadInstance();
|
| -
|
| - virtual ~NavigationManager() {
|
| - DCHECK(GetThreadInstance() != this);
|
| - }
|
| -
|
| - // Returns the url of the current top level navigation.
|
| - const std::wstring& url() const {
|
| - return url_;
|
| - }
|
| -
|
| - // Called to set the current top level URL that's being navigated to.
|
| - void set_url(const wchar_t* url) {
|
| - DVLOG(1) << __FUNCTION__ << " " << url;
|
| - url_ = url;
|
| - }
|
| -
|
| - // Returns the referrer header value of the current top level navigation.
|
| - const std::string& referrer() const {
|
| - return referrer_;
|
| - }
|
| -
|
| - void set_referrer(const std::string& referrer) {
|
| - referrer_ = referrer;
|
| - }
|
| -
|
| - // Return true if this is a URL that represents a top-level
|
| - // document that might have to be rendered in CF.
|
| - virtual bool IsTopLevelUrl(const wchar_t* url);
|
| -
|
| - // Called when we've detected the http-equiv meta tag in the current page
|
| - // and need to switch over from mshtml to CF.
|
| - virtual HRESULT NavigateToCurrentUrlInCF(IBrowserService* browser);
|
| -
|
| - void set_post_data(VARIANT* post_data) {
|
| - post_data_.Reset();
|
| - if (post_data) {
|
| - if (V_VT(post_data) == (VT_BYREF | VT_VARIANT)) {
|
| - post_data_.Set(*post_data->pvarVal);
|
| - } else {
|
| - NOTREACHED() << "unexpected type for post_data: "
|
| - << std::hex << post_data->vt;
|
| - }
|
| - }
|
| - }
|
| -
|
| - const base::win::ScopedVariant& post_data() const {
|
| - return post_data_;
|
| - }
|
| -
|
| - void set_headers(VARIANT* headers) {
|
| - headers_.Reset();
|
| - if (headers) {
|
| - headers_ = *headers;
|
| - }
|
| - }
|
| -
|
| - const base::win::ScopedVariant& headers() const {
|
| - return headers_;
|
| - }
|
| -
|
| - protected:
|
| - std::string referrer_;
|
| - std::wstring url_;
|
| - base::win::ScopedVariant post_data_;
|
| - base::win::ScopedVariant headers_;
|
| -
|
| - static base::LazyInstance<base::ThreadLocalPointer<NavigationManager> >
|
| - thread_singleton_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(NavigationManager);
|
| -};
|
| -
|
| -// static-only class that manages an IMoniker patch.
|
| -// We need this patch to stay in the loop when top-level HTML content is
|
| -// downloaded that might have the CF http-equiv meta tag.
|
| -// When we detect candidates for those requests, we add our own callback
|
| -// object (as explained at the top of this file) and use it to cache the
|
| -// original document contents in order to avoid multiple network trips
|
| -// if we need to switch the renderer over to CF.
|
| -class MonikerPatch {
|
| - MonikerPatch() {} // no instances should be created of this class.
|
| - public:
|
| - // Patches two IMoniker methods, BindToObject and BindToStorage.
|
| - static bool Initialize();
|
| -
|
| - // Nullifies the IMoniker patches.
|
| - static void Uninitialize();
|
| -
|
| - // Typedefs for IMoniker methods.
|
| - typedef HRESULT (STDMETHODCALLTYPE* IMoniker_BindToObject_Fn)(IMoniker* me,
|
| - IBindCtx* bind_ctx, IMoniker* to_left, REFIID iid, void** obj);
|
| - typedef HRESULT (STDMETHODCALLTYPE* IMoniker_BindToStorage_Fn)(IMoniker* me,
|
| - IBindCtx* bind_ctx, IMoniker* to_left, REFIID iid, void** obj);
|
| -
|
| - static STDMETHODIMP BindToObject(IMoniker_BindToObject_Fn original,
|
| - IMoniker* me, IBindCtx* bind_ctx,
|
| - IMoniker* to_left, REFIID iid, void** obj);
|
| -
|
| - static STDMETHODIMP BindToStorage(IMoniker_BindToStorage_Fn original,
|
| - IMoniker* me, IBindCtx* bind_ctx,
|
| - IMoniker* to_left, REFIID iid, void** obj);
|
| -};
|
| -
|
| -extern wchar_t* kChromeRequestParam;
|
| -
|
| -#endif // CHROME_FRAME_URLMON_MONIKER_H_
|
|
|