|
1 /* |
|
2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of the License "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 #include "config.h" |
|
18 #include "PluginStreamLoaderClient.h" |
|
19 |
|
20 #include "Page.h" |
|
21 #include "Frame.h" |
|
22 #include "FrameLoader.h" |
|
23 #include "DocumentLoader.h" |
|
24 #include "ProgressTracker.h" |
|
25 #include "ResourceRequest.h" |
|
26 #include "ResourceResponse.h" |
|
27 |
|
28 #include "StaticObjectsContainer.h" |
|
29 |
|
30 #include "PluginSkin.h" |
|
31 #include "PluginStream.h" |
|
32 #include "PluginHandler.h" |
|
33 |
|
34 #include "NetScapePlugInStreamLoader.h" |
|
35 |
|
36 using namespace WebCore; |
|
37 |
|
38 |
|
39 NetscapePlugInStreamLoaderClient* NetscapePlugInStreamLoaderClient::NewL(const String& url, PluginSkin* pluginskin, Frame* frame, void* notifydata) |
|
40 { |
|
41 NetscapePlugInStreamLoaderClient* self = new (ELeave) NetscapePlugInStreamLoaderClient(); |
|
42 CleanupStack::PushL( self ); |
|
43 self->ConstructL( url, pluginskin, frame, notifydata ); |
|
44 CleanupStack::Pop(); |
|
45 return self; |
|
46 } |
|
47 |
|
48 |
|
49 NetscapePlugInStreamLoaderClient* NetscapePlugInStreamLoaderClient::NewL(const ResourceRequest& request, PluginSkin* pluginskin, Frame* frame, void* notifydata) |
|
50 { |
|
51 NetscapePlugInStreamLoaderClient* self = new (ELeave) NetscapePlugInStreamLoaderClient(); |
|
52 CleanupStack::PushL( self ); |
|
53 |
|
54 self->ConstructL( request, pluginskin, frame, notifydata ); |
|
55 |
|
56 CleanupStack::Pop(); |
|
57 return self; |
|
58 } |
|
59 |
|
60 void NetscapePlugInStreamLoaderClient::ConstructL(const String& url, PluginSkin* pluginskin, Frame* frame, void* notifydata) |
|
61 { |
|
62 m_loader = 0; |
|
63 m_request = 0; |
|
64 m_pluginstream = 0; |
|
65 m_frame = frame; |
|
66 m_pluginstream = new (ELeave) PluginStream(pluginskin, this, notifydata); |
|
67 m_request = new (ELeave) ResourceRequest(m_frame->loader()->completeURL(url)); |
|
68 |
|
69 if ( !m_frame->loader()->canLoad(m_request->url(), frame->document()) ) |
|
70 return; |
|
71 |
|
72 if ( m_frame->loader()->shouldHideReferrer(m_request->url(), frame->loader()->outgoingReferrer()) ) |
|
73 m_request->clearHTTPReferrer(); |
|
74 |
|
75 |
|
76 m_loader = NetscapePlugInStreamLoader::create(frame,this); |
|
77 if (m_loader) |
|
78 m_loader->setShouldBufferData(false); |
|
79 } |
|
80 |
|
81 void NetscapePlugInStreamLoaderClient::ConstructL(const ResourceRequest& request, PluginSkin* pluginskin, Frame* frame, void* notifydata) |
|
82 { |
|
83 |
|
84 m_loader = 0; |
|
85 m_request = 0; |
|
86 m_pluginstream = 0; |
|
87 m_frame = frame; |
|
88 m_pluginstream = new (ELeave) PluginStream(pluginskin, this, notifydata); |
|
89 m_request = new (ELeave) ResourceRequest(request.url()); |
|
90 |
|
91 m_request->setCachePolicy(request.cachePolicy()); |
|
92 m_request->setTimeoutInterval(request.timeoutInterval()); |
|
93 m_request->setMainDocumentURL(request.mainDocumentURL()); |
|
94 m_request->setHTTPMethod(request.httpMethod()); |
|
95 m_request->addHTTPHeaderFields(request.httpHeaderFields()); |
|
96 m_request->setHTTPContentType(request.httpContentType()); |
|
97 m_request->setHTTPReferrer(request.httpReferrer()); |
|
98 m_request->setHTTPUserAgent(request.httpUserAgent()); |
|
99 m_request->setHTTPAccept(request.httpAccept()); |
|
100 m_request->setHTTPBody(request.httpBody()); |
|
101 m_request->setAllowHTTPCookies(request.allowHTTPCookies()); |
|
102 |
|
103 |
|
104 if ( !m_frame->loader()->canLoad(m_request->url(), frame->document()) ) |
|
105 return; |
|
106 |
|
107 if ( m_frame->loader()->shouldHideReferrer(m_request->url(), frame->loader()->outgoingReferrer()) ) |
|
108 m_request->clearHTTPReferrer(); |
|
109 |
|
110 |
|
111 m_loader = NetscapePlugInStreamLoader::create(m_frame,this); |
|
112 |
|
113 } |
|
114 |
|
115 NetscapePlugInStreamLoaderClient::NetscapePlugInStreamLoaderClient() : m_frame(0), m_loader(0), m_error(KErrNone) |
|
116 { |
|
117 } |
|
118 |
|
119 NetscapePlugInStreamLoaderClient::~NetscapePlugInStreamLoaderClient() |
|
120 { |
|
121 |
|
122 if (m_loader) |
|
123 m_loader->releaseResources(); |
|
124 |
|
125 delete m_request; |
|
126 delete m_pluginstream; |
|
127 |
|
128 } |
|
129 |
|
130 |
|
131 void NetscapePlugInStreamLoaderClient::start() |
|
132 { |
|
133 if (m_loader) { |
|
134 m_loader->documentLoader()->addSubresourceLoader(m_loader); |
|
135 m_loader->load(*m_request); |
|
136 } |
|
137 } |
|
138 |
|
139 void NetscapePlugInStreamLoaderClient::stop() |
|
140 { |
|
141 |
|
142 if (m_loader && !m_loader->isDone()) |
|
143 m_loader->cancel(); |
|
144 } |
|
145 |
|
146 void NetscapePlugInStreamLoaderClient::cancelWithError(const ResourceError& error) |
|
147 { |
|
148 if (m_loader && !m_loader->isDone()) |
|
149 m_loader->cancel(error); |
|
150 } |
|
151 |
|
152 void NetscapePlugInStreamLoaderClient::didReceiveResponse(const ResourceResponse& response) |
|
153 { |
|
154 int status = response.httpStatusCode(); |
|
155 if (status < 200 || status >= 300) { |
|
156 cancelWithError(ResourceError(String(response.url()), KErrGeneral, String(response.url()), String(response.httpStatusText()))); |
|
157 return; |
|
158 } |
|
159 |
|
160 if (m_pluginstream) { |
|
161 TRAP(m_error, m_pluginstream->createNPStreamL(response.url().des(), response.mimeType().des(), response.expectedContentLength())); |
|
162 } |
|
163 |
|
164 } |
|
165 |
|
166 void NetscapePlugInStreamLoaderClient::didReceiveData(const char* data, int length, long long lengthReceived) |
|
167 { |
|
168 |
|
169 if (m_pluginstream && m_error == KErrNone) { |
|
170 TRAP(m_error, m_pluginstream->writeStreamL(data, length)); |
|
171 } |
|
172 |
|
173 if (m_error && m_pluginstream) { |
|
174 m_pluginstream->destroyStream(m_error); |
|
175 |
|
176 if (m_loader && !m_loader->isDone()) { |
|
177 m_loader->cancel(); |
|
178 } |
|
179 } |
|
180 } |
|
181 |
|
182 void NetscapePlugInStreamLoaderClient::didFinishLoading() |
|
183 { |
|
184 if (m_pluginstream) { |
|
185 m_pluginstream->destroyStream(m_error); |
|
186 } |
|
187 } |
|
188 |
|
189 void NetscapePlugInStreamLoaderClient::didFail(const ResourceError& error) |
|
190 { |
|
191 if (m_pluginstream) { |
|
192 m_pluginstream->destroyStream(error.errorCode() ? error.errorCode() : KErrCancel); |
|
193 } |
|
194 } |
|
195 |
|
196 void NetscapePlugInStreamLoaderClient::didCancel(const ResourceError& error) |
|
197 { |
|
198 if (m_pluginstream) { |
|
199 m_pluginstream->destroyStream(error.errorCode() ? error.errorCode() : KErrCancel); |
|
200 } |
|
201 } |
|
202 |
|
203 |
|
204 |
|
205 |
|
206 |
|
207 |