<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[20658] S60/branches/3.1m/WebKit</title>
</head>
<body>
<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/20658">20658</a></dd>
<dt>Author</dt> <dd>spadma</dd>
<dt>Date</dt> <dd>2007-04-02 11:22:46 -0700 (Mon, 02 Apr 2007)</dd>
</dl>
<h3>Log Message</h3>
<pre>2007-04-02 bujtas <zbujtas@gmail.com>
Reviewed by Sachin.
DESC: implement client side accept header support
http://bugs.webkit.org/show_bug.cgi?id=13256
* BrowserControl/src/BrCtl.cpp:
(CBrCtl::SetParamL):
* ResourceLoader/inc/LoaderContainer.h:
(CLoaderContainer::ClientAcceptHeaders):
* ResourceLoader/src/HttpTransaction.cpp:
(CHttpTransaction::AddRequestHeadersL):
* ResourceLoader/src/LoaderContainer.cpp:
(CLoaderContainer::~CLoaderContainer):
(CLoaderContainer::SetClientAcceptHeadersL):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#S60branches31mWebKitBrowserControlsrcBrCtlcpp">S60/branches/3.1m/WebKit/BrowserControl/src/BrCtl.cpp</a></li>
<li><a href="#S60branches31mWebKitChangeLog">S60/branches/3.1m/WebKit/ChangeLog</a></li>
<li><a href="#S60branches31mWebKitResourceLoaderincLoaderContainerh">S60/branches/3.1m/WebKit/ResourceLoader/inc/LoaderContainer.h</a></li>
<li><a href="#S60branches31mWebKitResourceLoadersrcHttpTransactioncpp">S60/branches/3.1m/WebKit/ResourceLoader/src/HttpTransaction.cpp</a></li>
<li><a href="#S60branches31mWebKitResourceLoadersrcLoaderContainercpp">S60/branches/3.1m/WebKit/ResourceLoader/src/LoaderContainer.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="S60branches31mWebKitBrowserControlsrcBrCtlcpp"></a>
<div class="modfile"><h4>Modified: S60/branches/3.1m/WebKit/BrowserControl/src/BrCtl.cpp (20657 => 20658)</h4>
<pre class="diff"><span>
<span class="info">--- S60/branches/3.1m/WebKit/BrowserControl/src/BrCtl.cpp        2007-04-02 17:39:53 UTC (rev 20657)
+++ S60/branches/3.1m/WebKit/BrowserControl/src/BrCtl.cpp        2007-04-02 18:22:46 UTC (rev 20658)
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx"> #include "UrlRequestInfo.h"
</span><span class="cx"> #include "ToolBar.h"
</span><span class="cx"> #include <EscapeUtils.h>
</span><del>-
</del><ins>+#include "LoaderContainer.h"
</ins><span class="cx"> #ifdef RD_32_BROWSER
</span><span class="cx"> #include "SmartLinkHandler.h"
</span><span class="cx"> #endif
</span><span class="lines">@@ -1400,9 +1400,14 @@
</span><span class="cx"> // -----------------------------------------------------------------------------
</span><span class="cx"> //
</span><span class="cx"> EXPORT_C void CBrCtl::SetParamL(
</span><del>- TBrCtlDefs::TBrCtlParams /*aParam*/,
- const TDesC& /*aValue*/ )
</del><ins>+ TBrCtlDefs::TBrCtlParams aParam,
+ const TDesC& aValue )
</ins><span class="cx"> {
</span><ins>+ //
+ if (aParam == TBrCtlDefs::EParamsRequestHeaders)
+ {
+ CStaticObjectContainer::Instance().LoaderContainerL(*this).SetClientAcceptHeadersL(aValue);
+ }
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // -----------------------------------------------------------------------------
</span></span></pre></div>
<a id="S60branches31mWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: S60/branches/3.1m/WebKit/ChangeLog (20657 => 20658)</h4>
<pre class="diff"><span>
<span class="info">--- S60/branches/3.1m/WebKit/ChangeLog        2007-04-02 17:39:53 UTC (rev 20657)
+++ S60/branches/3.1m/WebKit/ChangeLog        2007-04-02 18:22:46 UTC (rev 20658)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2007-04-02 bujtas <zbujtas@gmail.com>
+
+ Reviewed by Sachin.
+ DESC: implement client side accept header support
+ http://bugs.webkit.org/show_bug.cgi?id=13256
+
+ * BrowserControl/src/BrCtl.cpp:
+ (CBrCtl::SetParamL):
+ * ResourceLoader/inc/LoaderContainer.h:
+ (CLoaderContainer::ClientAcceptHeaders):
+ * ResourceLoader/src/HttpTransaction.cpp:
+ (CHttpTransaction::AddRequestHeadersL):
+ * ResourceLoader/src/LoaderContainer.cpp:
+ (CLoaderContainer::~CLoaderContainer):
+ (CLoaderContainer::SetClientAcceptHeadersL):
+
</ins><span class="cx"> 2007-03-29 vbradley <vincent.bradley@nokia.com>
</span><span class="cx">
</span><span class="cx"> Reviewed by Yongjan.
</span></span></pre></div>
<a id="S60branches31mWebKitResourceLoaderincLoaderContainerh"></a>
<div class="modfile"><h4>Modified: S60/branches/3.1m/WebKit/ResourceLoader/inc/LoaderContainer.h (20657 => 20658)</h4>
<pre class="diff"><span>
<span class="info">--- S60/branches/3.1m/WebKit/ResourceLoader/inc/LoaderContainer.h        2007-04-02 17:39:53 UTC (rev 20657)
+++ S60/branches/3.1m/WebKit/ResourceLoader/inc/LoaderContainer.h        2007-04-02 18:22:46 UTC (rev 20658)
</span><span class="lines">@@ -9,9 +9,9 @@
</span><span class="cx"> * Copyright (c) 2006, Nokia Corporation
</span><span class="cx"> * All rights reserved.
</span><span class="cx"> *
</span><del>-*         Redistribution and use in source and binary forms, with or without
-*         modification, are permitted provided that the following conditions
-*         are met:
</del><ins>+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
</ins><span class="cx"> *
</span><span class="cx"> * * Redistributions of source code must retain the above copyright
</span><span class="cx"> * notice, this list of conditions and the following disclaimer.
</span><span class="lines">@@ -23,18 +23,18 @@
</span><span class="cx"> * contributors may be used to endorse or promote products derived
</span><span class="cx"> * from this software without specific prior written permission.
</span><span class="cx"> *
</span><del>-*         THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-*         "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-*         LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-*         A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-*         OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-*         SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-*         LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-*         DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-*         THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-*         (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
-*         USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-*         DAMAGE.
</del><ins>+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
</ins><span class="cx"> *
</span><span class="cx"> * Please see file patentlicense.txt for further grants.
</span><span class="cx"> * ==============================================================================
</span><span class="lines">@@ -60,11 +60,11 @@
</span><span class="cx"> // DATA TYPES
</span><span class="cx">
</span><span class="cx"> enum TCookieFilterLoad
</span><del>-        {
-        ELoadNone,
-        ELoadFilter,
-        EUnloadFilter
-        };
</del><ins>+ {
+ ELoadNone,
+ ELoadFilter,
+ EUnloadFilter
+ };
</ins><span class="cx">
</span><span class="cx"> // FUNCTION PROTOTYPES
</span><span class="cx">
</span><span class="lines">@@ -168,6 +168,20 @@
</span><span class="cx"> TBool HTTPPipelining() const { return iHttpPipelining; }
</span><span class="cx">
</span><span class="cx"> /**
</span><ins>+ * Set accept headers set by the client application
+ * @since 3.1
+ * @return
+ */
+ void SetClientAcceptHeadersL( const TPtrC& aAcceptHeaders );
+
+ /**
+ * return accept headers set by the client application
+ * @since 3.1
+ * @return
+ */
+ const RPointerArray<HBufC8>& ClientAcceptHeaders() const { return iClientAcceptHeaders; }
+
+ /**
</ins><span class="cx"> * Get load observer
</span><span class="cx"> * @since 3.1
</span><span class="cx"> * @return
</span><span class="lines">@@ -180,8 +194,8 @@
</span><span class="cx"> * @return
</span><span class="cx"> */
</span><span class="cx"> void SetLoadObservers( MBrCtlSpecialLoadObserver& aLoadObserver,
</span><del>-                                                                MBrCtlDownloadObserver& aBrCtlDownloadObserver,
-                                                                CHttpLoaderEventToUiListener& aUiEventListener);
</del><ins>+ MBrCtlDownloadObserver& aBrCtlDownloadObserver,
+ CHttpLoaderEventToUiListener& aUiEventListener);
</ins><span class="cx">
</span><span class="cx"> /**
</span><span class="cx"> * Get load observer
</span><span class="lines">@@ -297,6 +311,8 @@
</span><span class="cx"> TCookieFilterLoad iCookieFilterLoad;
</span><span class="cx"> //
</span><span class="cx"> CHttpCacheManager* iCache; // owned
</span><ins>+ //
+ RPointerArray<HBufC8> iClientAcceptHeaders;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> #endif // LOADERCONTAINER_H
</span></span></pre></div>
<a id="S60branches31mWebKitResourceLoadersrcHttpTransactioncpp"></a>
<div class="modfile"><h4>Modified: S60/branches/3.1m/WebKit/ResourceLoader/src/HttpTransaction.cpp (20657 => 20658)</h4>
<pre class="diff"><span>
<span class="info">--- S60/branches/3.1m/WebKit/ResourceLoader/src/HttpTransaction.cpp        2007-04-02 17:39:53 UTC (rev 20657)
+++ S60/branches/3.1m/WebKit/ResourceLoader/src/HttpTransaction.cpp        2007-04-02 18:22:46 UTC (rev 20658)
</span><span class="lines">@@ -825,6 +825,43 @@
</span><span class="cx"> THTTPHdrVal tokenVal = (TInt)(MConnectionCallback*)this;
</span><span class="cx"> iTrans->PropertySet().RemoveProperty( connectionCallbackStr );
</span><span class="cx"> iTrans->PropertySet().SetPropertyL( connectionCallbackStr, tokenVal );
</span><ins>+
+ // add client request headers
+ CLoaderContainer* loaderContainer = static_cast<CLoaderContainer*>
+ (TWebCoreLoaderContainer::LoaderContainer());
+ const RPointerArray<HBufC8>& clientHeaders = loaderContainer->ClientAcceptHeaders();
+ int i=0;
+ // clientHeaders.Count()-1 for the double i++ to make sure that we
+ // have both the key and the value string
+ while (i < clientHeaders.Count()-1)
+ {
+ TPtrC8 headerName = *(clientHeaders[i++]);
+ TPtrC8 headerValue = *(clientHeaders[i++]);
+ // header name
+ RStringF headerNameStr = stringPool.OpenFStringL(headerName);
+ CleanupClosePushL(headerNameStr);
+
+ // date type
+ if (headerNameStr == stringPool.StringF(HTTP::EIfModifiedSince, RHTTPSession::GetTable()) ||
+ headerNameStr == stringPool.StringF(HTTP::EIfUnmodifiedSince, RHTTPSession::GetTable()))
+ {
+ TInternetDate date;
+ date.SetDateL(headerValue);
+ TDateTime modifyTime(date.DateTime());
+ hdr.SetFieldL(headerNameStr, modifyTime);
+ }
+ // string
+ else
+ {
+ RStringF headerValueStr = stringPool.OpenFStringL( headerValue );
+ CleanupClosePushL(headerValueStr);
+
+ hdr.SetFieldL( headerNameStr, headerValueStr );
+ CleanupStack::PopAndDestroy(); // headerNameStr
+ }
+ //
+ CleanupStack::PopAndDestroy(); // headerNameStr
+ }
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // -----------------------------------------------------------------------------
</span></span></pre></div>
<a id="S60branches31mWebKitResourceLoadersrcLoaderContainercpp"></a>
<div class="modfile"><h4>Modified: S60/branches/3.1m/WebKit/ResourceLoader/src/LoaderContainer.cpp (20657 => 20658)</h4>
<pre class="diff"><span>
<span class="info">--- S60/branches/3.1m/WebKit/ResourceLoader/src/LoaderContainer.cpp        2007-04-02 17:39:53 UTC (rev 20657)
+++ S60/branches/3.1m/WebKit/ResourceLoader/src/LoaderContainer.cpp        2007-04-02 18:22:46 UTC (rev 20658)
</span><span class="lines">@@ -130,6 +130,8 @@
</span><span class="cx"> delete iCache;
</span><span class="cx"> delete iDownloadObserver;
</span><span class="cx"> iLoaderArray.Close();
</span><ins>+ iClientAcceptHeaders.ResetAndDestroy();
+ iClientAcceptHeaders.Close();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // -----------------------------------------------------------------------------
</span><span class="lines">@@ -447,4 +449,68 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+// -----------------------------------------------------------------------------
+// CLoaderContainer::SetClientAcceptHeaders
+//
+// -----------------------------------------------------------------------------
+//
+void CLoaderContainer::SetClientAcceptHeadersL( const TPtrC& aAcceptHeaders )
+ {
+ // cleanup pervious accept headers
+ iClientAcceptHeaders.ResetAndDestroy();
+
+ TInt startName = 0;
+ TInt endName = 0;
+ TInt startValue = 0;
+ TInt endValue = 0;
+ TInt consumed = 0;
+ TInt len = aAcceptHeaders.Length();
+
+ HBufC8* acceptHeaders = HBufC8::NewLC(aAcceptHeaders.Length());
+ acceptHeaders->Des().Copy(aAcceptHeaders);
+ while (consumed < len)
+ {
+ TPtrC8 ptr(acceptHeaders->Ptr() + consumed, len - consumed);
+ // find the headers separator first
+ endValue = ptr.Locate('\r');
+ if (endValue == 0)
+ {
+ // skip empty headers
+ consumed++;
+ continue;
+ }
+ if (endValue == KErrNotFound)
+ {
+ endValue = ptr.Length();
+ }
+ TPtrC8 header(ptr.Ptr(), endValue);
+ startName = 0;
+ endName = header.Locate(':');
+ if (endName <= 0)
+ {
+ // No separator in the header, or it is the first character
+ User::Leave(KErrArgument);
+ }
+ // Skip leading spaces in header value
+ for (startValue = endName + 1; startValue < endValue && header[startValue] == ' '; startValue++)
+ {
+ }
+ //
+ TInt headerPos = startName;
+ TInt valuePos = startValue;
+ //
+ HBufC8* headerBuf = HBufC8::NewLC(endName);
+ HBufC8* valueBuf = HBufC8::NewLC(endValue-startValue);
+
+ headerBuf->Des().Copy(ptr.Left(endName));
+ valueBuf->Des().Copy(ptr.Mid(startValue, endValue - startValue));
+
+ User::LeaveIfError(iClientAcceptHeaders.Append(headerBuf));
+ User::LeaveIfError(iClientAcceptHeaders.Append(valueBuf));
+ CleanupStack::Pop(2); // headerBuf, valueBuf
+ consumed += (endValue + 1);
+ }
+ CleanupStack::PopAndDestroy(); // acceptHeaders
+ }
+
</ins><span class="cx"> // End of File
</span></span></pre>
</div>
</div>
</body>
</html>