<!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>[20659] S60/trunk/WebKit</title>
</head>
<body>
<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/20659">20659</a></dd>
<dt>Author</dt> <dd>spadma</dd>
<dt>Date</dt> <dd>2007-04-02 11:22:54 -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="#S60trunkWebKitBrowserControlsrcBrCtlcpp">S60/trunk/WebKit/BrowserControl/src/BrCtl.cpp</a></li>
<li><a href="#S60trunkWebKitChangeLog">S60/trunk/WebKit/ChangeLog</a></li>
<li><a href="#S60trunkWebKitResourceLoaderincLoaderContainerh">S60/trunk/WebKit/ResourceLoader/inc/LoaderContainer.h</a></li>
<li><a href="#S60trunkWebKitResourceLoadersrcHttpTransactioncpp">S60/trunk/WebKit/ResourceLoader/src/HttpTransaction.cpp</a></li>
<li><a href="#S60trunkWebKitResourceLoadersrcLoaderContainercpp">S60/trunk/WebKit/ResourceLoader/src/LoaderContainer.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="S60trunkWebKitBrowserControlsrcBrCtlcpp"></a>
<div class="modfile"><h4>Modified: S60/trunk/WebKit/BrowserControl/src/BrCtl.cpp (20658 => 20659)</h4>
<pre class="diff"><span>
<span class="info">--- S60/trunk/WebKit/BrowserControl/src/BrCtl.cpp        2007-04-02 18:22:46 UTC (rev 20658)
+++ S60/trunk/WebKit/BrowserControl/src/BrCtl.cpp        2007-04-02 18:22:54 UTC (rev 20659)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx"> #include <AknsUtils.h>
</span><span class="cx"> #include <AknsDrawUtils.h>
</span><span class="cx"> #include <EscapeUtils.h>
</span><del>-
</del><ins>+#include "LoaderContainer.h"
</ins><span class="cx"> #ifdef RD_BROWSER_WIDGETS
</span><span class="cx"> #include "WidgetExtension.h"
</span><span class="cx"> #endif //RD_BROWSER_WIDGETS
</span><span class="lines">@@ -1437,9 +1437,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="S60trunkWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: S60/trunk/WebKit/ChangeLog (20658 => 20659)</h4>
<pre class="diff"><span>
<span class="info">--- S60/trunk/WebKit/ChangeLog        2007-04-02 18:22:46 UTC (rev 20658)
+++ S60/trunk/WebKit/ChangeLog        2007-04-02 18:22:54 UTC (rev 20659)
</span><span class="lines">@@ -1,3 +1,20 @@
</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"> vbradley, reviewed by yongjun
</span><span class="cx"> DESC: Fix cursor when browser is brought back from background and a
</span><span class="cx"> plugin has focus.
</span></span></pre></div>
<a id="S60trunkWebKitResourceLoaderincLoaderContainerh"></a>
<div class="modfile"><h4>Modified: S60/trunk/WebKit/ResourceLoader/inc/LoaderContainer.h (20658 => 20659)</h4>
<pre class="diff"><span>
<span class="info">--- S60/trunk/WebKit/ResourceLoader/inc/LoaderContainer.h        2007-04-02 18:22:46 UTC (rev 20658)
+++ S60/trunk/WebKit/ResourceLoader/inc/LoaderContainer.h        2007-04-02 18:22:54 UTC (rev 20659)
</span><span class="lines">@@ -182,6 +182,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">@@ -313,6 +327,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="S60trunkWebKitResourceLoadersrcHttpTransactioncpp"></a>
<div class="modfile"><h4>Modified: S60/trunk/WebKit/ResourceLoader/src/HttpTransaction.cpp (20658 => 20659)</h4>
<pre class="diff"><span>
<span class="info">--- S60/trunk/WebKit/ResourceLoader/src/HttpTransaction.cpp        2007-04-02 18:22:46 UTC (rev 20658)
+++ S60/trunk/WebKit/ResourceLoader/src/HttpTransaction.cpp        2007-04-02 18:22:54 UTC (rev 20659)
</span><span class="lines">@@ -837,6 +837,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="S60trunkWebKitResourceLoadersrcLoaderContainercpp"></a>
<div class="modfile"><h4>Modified: S60/trunk/WebKit/ResourceLoader/src/LoaderContainer.cpp (20658 => 20659)</h4>
<pre class="diff"><span>
<span class="info">--- S60/trunk/WebKit/ResourceLoader/src/LoaderContainer.cpp        2007-04-02 18:22:46 UTC (rev 20658)
+++ S60/trunk/WebKit/ResourceLoader/src/LoaderContainer.cpp        2007-04-02 18:22:54 UTC (rev 20659)
</span><span class="lines">@@ -130,6 +130,9 @@
</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">@@ -462,4 +465,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>