1
// Copyright 2006, Google Inc.
3
// Redistribution and use in source and binary forms, with or without
4
// modification, are permitted provided that the following conditions are met:
6
// 1. Redistributions of source code must retain the above copyright notice,
7
// this list of conditions and the following disclaimer.
8
// 2. Redistributions in binary form must reproduce the above copyright notice,
9
// this list of conditions and the following disclaimer in the documentation
10
// and/or other materials provided with the distribution.
11
// 3. Neither the name of Google Inc. nor the names of its contributors may be
12
// used to endorse or promote products derived from this software without
13
// specific prior written permission.
15
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
16
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
17
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
18
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
#ifndef GEARS_LOCALSERVER_FILE_SUBMITTER_H__
27
#define GEARS_LOCALSERVER_FILE_SUBMITTER_H__
29
#if defined(OS_WINCE) || defined(BROWSER_NPAPI)
30
// FileSubmitter is not implemented for WinCE or NPAPI
33
#include "gears/base/common/base_class.h"
34
#include "gears/base/common/common.h"
35
#include "gears/base/common/js_types.h"
36
#include "gears/base/common/security_model.h"
37
#include "gears/localserver/common/resource_store.h"
44
class ATL_NO_VTABLE FileSubmitterBehaviorFactory
45
: public CComObjectRootEx<CComMultiThreadModel>,
46
public CComCoClass<FileSubmitterBehaviorFactory>,
47
public IElementBehaviorFactory {
49
DECLARE_NOT_AGGREGATABLE(FileSubmitterBehaviorFactory)
50
DECLARE_PROTECT_FINAL_CONSTRUCT()
52
BEGIN_COM_MAP(FileSubmitterBehaviorFactory)
53
COM_INTERFACE_ENTRY(IElementBehaviorFactory)
56
FileSubmitterBehaviorFactory() {}
58
STDMETHOD(FindBehavior)(BSTR name, BSTR url,
59
IElementBehaviorSite* behavior_site,
60
IElementBehavior** behavior_out);
63
std::string16 filename_;
65
friend class GearsFileSubmitter;
66
DISALLOW_EVIL_CONSTRUCTORS(FileSubmitterBehaviorFactory);
72
// Facilitates the inclusion of captured local files in form submissions by
73
// manipulating <input type=file> elements to refer to local files that were
74
// previously captured via store.CaptureFile().
75
class GearsFileSubmitter : public ModuleImplBaseClass {
78
: ModuleImplBaseClass("GearsFileSubmitter")
80
,html_element2_(static_cast<IHTMLElement2*>(NULL))
85
// IN: HtmlElement file_input_element, string captured_url_key
87
void SetFileInputElement(JsCallContext *context);
91
std::string16 name_of_temporary_file_;
94
CComQIPtr<IHTMLElement2> html_element2_;
95
LONG behavior_cookie_;
98
bool CreateTempFile(const std::string16 &in_filename,
99
const WebCacheDB::PayloadInfo &payload);
101
bool CaptureInputElement(JsDomElement &dom_element);
103
friend class GearsResourceStore;
104
DISALLOW_EVIL_CONSTRUCTORS(GearsFileSubmitter);
107
#endif // defined(OS_WINCE) || defined(BROWSER_NPAPI)
108
#endif // GEARS_LOCALSERVER_FILE_SUBMITTER_H__