| Index: chrome_frame/urlmon_bind_status_callback.h
|
| diff --git a/chrome_frame/urlmon_bind_status_callback.h b/chrome_frame/urlmon_bind_status_callback.h
|
| deleted file mode 100644
|
| index 1bd76a95000ea75a4afb024d3f04cb517720c277..0000000000000000000000000000000000000000
|
| --- a/chrome_frame/urlmon_bind_status_callback.h
|
| +++ /dev/null
|
| @@ -1,178 +0,0 @@
|
| -// Copyright (c) 2011 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_BIND_STATUS_CALLBACK_H_
|
| -#define CHROME_FRAME_URLMON_BIND_STATUS_CALLBACK_H_
|
| -
|
| -#include <atlbase.h>
|
| -#include <atlcom.h>
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "chrome_frame/bind_status_callback_impl.h"
|
| -#include "chrome_frame/stream_impl.h"
|
| -
|
| -
|
| -// A fake stream class to serve cached data to arbitrary
|
| -// IBindStatusCallback
|
| -class CacheStream : public CComObjectRoot, public StreamImpl {
|
| - public:
|
| - BEGIN_COM_MAP(CacheStream)
|
| - COM_INTERFACE_ENTRY(IStream)
|
| - COM_INTERFACE_ENTRY(ISequentialStream)
|
| - END_COM_MAP()
|
| -
|
| - CacheStream() : size_(0), position_(0), eof_(false) {
|
| - }
|
| - HRESULT Initialize(const char* cache, size_t size, bool eof);
|
| - static HRESULT BSCBFeedData(IBindStatusCallback* bscb, const char* data,
|
| - size_t size, CLIPFORMAT clip_format,
|
| - size_t flags, bool eof);
|
| -
|
| - // IStream overrides
|
| - STDMETHOD(Read)(void* pv, ULONG cb, ULONG* read);
|
| -
|
| - protected:
|
| - scoped_ptr<char[]> cache_;
|
| - size_t size_;
|
| - size_t position_;
|
| - bool eof_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(CacheStream);
|
| -};
|
| -
|
| -// Utility class for data sniffing
|
| -class SniffData {
|
| - public:
|
| - SniffData() : renderer_type_(OTHER), size_(0), eof_(false) {}
|
| -
|
| - enum RendererType {
|
| - UNDETERMINED,
|
| - CHROME,
|
| - OTHER
|
| - };
|
| -
|
| - HRESULT InitializeCache(const std::wstring& url);
|
| - HRESULT ReadIntoCache(IStream* stream, bool force_determination);
|
| - HRESULT DrainCache(IBindStatusCallback* bscb, DWORD bscf,
|
| - CLIPFORMAT clip_format);
|
| - void DetermineRendererType(bool last_chance);
|
| -
|
| - bool is_undetermined() const {
|
| - return (UNDETERMINED == renderer_type_);
|
| - }
|
| - bool is_chrome() const {
|
| - return (CHROME == renderer_type_);
|
| - }
|
| -
|
| - RendererType renderer_type() const {
|
| - return renderer_type_;
|
| - }
|
| -
|
| - size_t size() const {
|
| - return size_;
|
| - }
|
| -
|
| - bool is_cache_valid() {
|
| - return (size_ != 0);
|
| - }
|
| -
|
| - base::win::ScopedComPtr<IStream> cache_;
|
| - std::wstring url_;
|
| - RendererType renderer_type_;
|
| - size_t size_;
|
| -
|
| - static const size_t kMaxSniffSize = 2 * 1024;
|
| - bool eof_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(SniffData);
|
| -};
|
| -
|
| -// A wrapper for bind status callback in IMoniker::BindToStorage
|
| -class BSCBStorageBind : public BSCBImpl {
|
| - public:
|
| - typedef BSCBImpl CallbackImpl;
|
| - BSCBStorageBind();
|
| - ~BSCBStorageBind();
|
| -
|
| -BEGIN_COM_MAP(BSCBStorageBind)
|
| - COM_INTERFACE_ENTRY(IBindStatusCallback)
|
| - COM_INTERFACE_ENTRY_CHAIN(CallbackImpl)
|
| -END_COM_MAP()
|
| -
|
| - HRESULT Initialize(IMoniker* moniker, IBindCtx* bind_ctx);
|
| - HRESULT MayPlayBack(DWORD flags);
|
| -
|
| - // IBindStatusCallback
|
| - STDMETHOD(OnProgress)(ULONG progress, ULONG progress_max, ULONG status_code,
|
| - LPCWSTR status_text);
|
| - STDMETHOD(OnDataAvailable)(DWORD flags, DWORD size, FORMATETC* format_etc,
|
| - STGMEDIUM* stgmed);
|
| - STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR error);
|
| -
|
| - protected:
|
| - // is it a good time to start caching progress notifications
|
| - bool ShouldCacheProgress(ULONG status_code) const;
|
| -
|
| - protected:
|
| - SniffData data_sniffer_;
|
| -
|
| - // A structure to cache the progress notifications.
|
| - class Progress {
|
| - public:
|
| - Progress(ULONG progress, ULONG progress_max, ULONG status_code,
|
| - const wchar_t* status_text)
|
| - : progress_(progress),
|
| - progress_max_(progress_max),
|
| - status_code_(status_code) {
|
| - if (status_text) {
|
| - int len = lstrlenW(status_text) + 1;
|
| - status_text_.reset(new wchar_t[len]);
|
| - if (status_text_.get()) {
|
| - lstrcpynW(status_text_.get(), status_text, len);
|
| - } else {
|
| - NOTREACHED();
|
| - }
|
| - }
|
| - }
|
| -
|
| - ~Progress() {
|
| - }
|
| -
|
| - ULONG progress() const {
|
| - return progress_;
|
| - }
|
| -
|
| - ULONG progress_max() const {
|
| - return progress_max_;
|
| - }
|
| -
|
| - ULONG status_code() const {
|
| - return status_code_;
|
| - }
|
| -
|
| - const wchar_t* status_text() const {
|
| - return status_text_.get();
|
| - }
|
| -
|
| - protected:
|
| - ULONG progress_;
|
| - ULONG progress_max_;
|
| - ULONG status_code_;
|
| - // We don't use std::wstring here since we want to be able to play
|
| - // progress notifications back exactly as we got them. NULL and L"" are
|
| - // not equal.
|
| - scoped_ptr<wchar_t[]> status_text_;
|
| - };
|
| -
|
| - typedef std::vector<Progress*> ProgressVector;
|
| - ProgressVector saved_progress_;
|
| - CLIPFORMAT clip_format_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(BSCBStorageBind);
|
| -};
|
| -
|
| -#endif // CHROME_FRAME_URLMON_BIND_STATUS_CALLBACK_H_
|
|
|