Home | History | Annotate | Download | only in chrome_frame
      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
      3 // found in the LICENSE file.
      4 
      5 // Implementation of ChromeProtocol
      6 #include "chrome_frame/chrome_protocol.h"
      7 
      8 #include "base/logging.h"
      9 #include "chrome_frame/utils.h"
     10 
     11 // ChromeProtocol
     12 
     13 // Starts the class associated with the asynchronous pluggable protocol.
     14 STDMETHODIMP ChromeProtocol::Start(LPCWSTR url,
     15                                    IInternetProtocolSink* prot_sink,
     16                                    IInternetBindInfo* bind_info,
     17                                    DWORD flags,
     18                                    DWORD reserved) {
     19   DVLOG(1) << __FUNCTION__ << ": URL = " << url;
     20   prot_sink->ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE,
     21                             kChromeMimeType);
     22   prot_sink->ReportData(
     23       BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION |
     24       BSCF_DATAFULLYAVAILABLE,
     25       0,
     26       0);
     27   return S_OK;
     28 }
     29 
     30 // Allows the pluggable protocol handler to continue processing data on the
     31 // apartment (or user interface) thread. This method is called in response
     32 // to a call to IInternetProtocolSink::Switch.
     33 STDMETHODIMP ChromeProtocol::Continue(PROTOCOLDATA* protocol_data) {
     34   DVLOG(1) << __FUNCTION__;
     35   return S_OK;
     36 }
     37 
     38 // Aborts an operation in progress.
     39 STDMETHODIMP ChromeProtocol::Abort(HRESULT reason, DWORD options) {
     40   DVLOG(1) << __FUNCTION__;
     41   return S_OK;
     42 }
     43 
     44 STDMETHODIMP ChromeProtocol::Terminate(DWORD options) {
     45   DVLOG(1) << __FUNCTION__;
     46   return S_OK;
     47 }
     48 
     49 STDMETHODIMP ChromeProtocol::Suspend() {
     50   return E_NOTIMPL;
     51 }
     52 STDMETHODIMP ChromeProtocol::Resume() {
     53   return E_NOTIMPL;
     54 }
     55 
     56 // Reads data retrieved by the pluggable protocol handler.
     57 STDMETHODIMP ChromeProtocol::Read(void* buffer,
     58                                   ULONG buffer_size_in_bytes,
     59                                   ULONG* bytes_read) {
     60   DVLOG(1) << __FUNCTION__;
     61   return S_FALSE;
     62 }
     63 
     64 // Moves the current seek offset.
     65 STDMETHODIMP ChromeProtocol::Seek(LARGE_INTEGER move_by,
     66                               DWORD origin,
     67                               ULARGE_INTEGER* new_position) {
     68   DVLOG(1) << __FUNCTION__;
     69   return E_NOTIMPL;
     70 }
     71 
     72 // Locks the request so that IInternetProtocolRoot::Terminate ()
     73 // can be called and the remaining data can be read.
     74 STDMETHODIMP ChromeProtocol::LockRequest(DWORD options) {
     75   DVLOG(1) << __FUNCTION__;
     76   return S_OK;
     77 }
     78 
     79 // Frees any resources associated with a lock. Called only if
     80 // IInternetProtocol::LockRequest () was called.
     81 STDMETHODIMP ChromeProtocol::UnlockRequest() {
     82   DVLOG(1) << __FUNCTION__;
     83   return S_OK;
     84 }
     85