<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>31826</bug_id>
          
          <creation_ts>2009-11-24 04:51:49 -0800</creation_ts>
          <short_desc>[Qt] Make use of QNetworkReply::rawHeaderPairs</short_desc>
          <delta_ts>2009-11-26 03:17:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>166034</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-11-24 04:51:49 -0800</bug_when>
    <thetext>To avoid quadratic runtime behavior on transferring headers from Qt to WebCore use the new QNetworkReply method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166035</commentid>
    <comment_count>1</comment_count>
      <attachid>43758</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-11-24 04:56:40 -0800</bug_when>
    <thetext>Created attachment 43758
Use the new API

Use the new API, first version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166036</commentid>
    <comment_count>2</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-11-24 04:59:24 -0800</bug_when>
    <thetext>Okay the ChangeLog misses the link to the bug, I will add it when landing (it is already added)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166139</commentid>
    <comment_count>3</comment_count>
      <attachid>43758</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-24 10:13:37 -0800</bug_when>
    <thetext>Comment on attachment 43758
Use the new API

Could you explain more about the quadratic runtime?  It would be helpful to have a better ChangeLog entry.  The code itself looks sane, but it would be much better to explain why this is a problem and how this is the right solution for the problem in the ChangeLog.

r+, but cq- because the ChangeLog should be improved before landing (I expect you plan to land this yourself anyway, but just to prevent any confusion that this was good-to-go as is.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166275</commentid>
    <comment_count>4</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-11-24 14:23:44 -0800</bug_when>
    <thetext>Thanks. The explanation is the following.


The internal Qt representation for headers is a QList (linked list) that contains a pair of headers (header name, value). And the current code is asking for a QStringList of header names (goes through the linked list to construct the temporary QStringList).

And then for each QString in this QStringList it is asking for the rawHeaderValue (which is doing a linear search in the internal linked list to find the value). So in the worse case you have two for loops in each other iterating over the number of elements to find the header value.


The new API is giving access to the header pairs directly so we end up with just one for loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166691</commentid>
    <comment_count>5</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-11-26 03:17:09 -0800</bug_when>
    <thetext>Landed in r51411. I think I clarified the changelog.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43758</attachid>
            <date>2009-11-24 04:56:40 -0800</date>
            <delta_ts>2009-11-24 10:13:37 -0800</delta_ts>
            <desc>Use the new API</desc>
            <filename>0003-Qt-Use-QNetworkReply-rawHeaderPairs.patch</filename>
            <type>text/plain</type>
            <size>2643</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSA3NjBlOTQxMGE0Zjg2MDhlMzg2ZTViZDYzMDg4OTJkMTUxMjA4YzYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IFR1ZSwgMjQgTm92IDIwMDkgMTM6NDk6MjcgKzAxMDAKU3ViamVjdDog
W1BBVENIIDMvM10gW1F0XSBVc2UgUU5ldHdvcmtSZXBseTo6cmF3SGVhZGVyUGFpcnMKCmh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTgyNgoKVXNlIHRoZSBuZXcgUU5l
dHdvcmtSZXBseTo6cmF3SGVhZGVyUGFpcnMgdG8gYXZvaWQgcXVhZHJhdGljCnJ1bnRpbWUgd2hl
biBtb3ZpbmcgdGhlIGhlYWRlcnMgZnJvbSBRdCB0byBXZWJDb3JlLiBUaGlzIG1ldGhvZAppcyBv
bmx5IGF2YWlsYWJsZSBpbiBRdCA0LjcgYW5kIG11c3QgYmUgcHJvcGVybHkgZ3VhcmRlZC4KCiog
cGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHA6CihXZWJDb3JlOjpR
TmV0d29ya1JlcGx5SGFuZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQpOgotLS0KIFdlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArKysrKysr
KysrKysrKwogLi4uL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3Bw
ICAgfCAgICA2ICsrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAwIGRl
bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMGRiOGUwZi4uYTBmMmM3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0xMS0yNCAg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFVzZSBRTmV0d29y
a1JlcGx5OjpyYXdIZWFkZXJQYWlycworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24g
YW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgIFVzZSB0aGUgbmV3IFFOZXR3b3JrUmVwbHk6
OnJhd0hlYWRlclBhaXJzIHRvIGF2b2lkIHF1YWRyYXRpYworICAgICAgICBydW50aW1lIHdoZW4g
bW92aW5nIHRoZSBoZWFkZXJzIGZyb20gUXQgdG8gV2ViQ29yZS4gVGhpcyBtZXRob2QKKyAgICAg
ICAgaXMgb25seSBhdmFpbGFibGUgaW4gUXQgNC43IGFuZCBtdXN0IGJlIHByb3Blcmx5IGd1YXJk
ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUmVzcG9u
c2VJZk5lZWRlZCk6CisKIDIwMDktMTEtMjEgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8
emVja2VAc2VsZmlzaC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhh
bmRsZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5k
bGVyLmNwcAppbmRleCAzMmY1ZTMwLi5kNGM0MzY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKQEAgLTMwNyw5ICszMDcs
MTUgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQoKQog
ICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChtX3JlcGx5LT5hdHRyaWJ1dGUoUU5l
dHdvcmtSZXF1ZXN0OjpIdHRwUmVhc29uUGhyYXNlQXR0cmlidXRlKS50b0J5dGVBcnJheSgpLmNv
bnN0RGF0YSgpKTsKIAogICAgICAgICAvLyBBZGQgcmVtYWluaW5nIGhlYWRlcnMuCisjaWYgUVRf
VkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDcsIDApCisgICAgICAgIGZvcmVhY2ggKGNv
bnN0IFFOZXR3b3JrUmVwbHk6OlJhd0hlYWRlclBhaXImIHBhaXIsIG1fcmVwbHktPnJhd0hlYWRl
clBhaXJzKCkpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChRU3Ry
aW5nOjpmcm9tQXNjaWkocGFpci5maXJzdCksIFFTdHJpbmc6OmZyb21Bc2NpaShwYWlyLnNlY29u
ZCkpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBmb3JlYWNoIChjb25zdCBRQnl0ZUFycmF5
JiBoZWFkZXJOYW1lLCBtX3JlcGx5LT5yYXdIZWFkZXJMaXN0KCkpIHsKICAgICAgICAgICAgIHJl
c3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChRU3RyaW5nOjpmcm9tQXNjaWkoaGVhZGVyTmFtZSks
IFFTdHJpbmc6OmZyb21Bc2NpaShtX3JlcGx5LT5yYXdIZWFkZXIoaGVhZGVyTmFtZSkpKTsKICAg
ICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgUVVybCByZWRpcmVjdGlvbiA9IG1fcmVwbHkt
PmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OlJlZGlyZWN0aW9uVGFyZ2V0QXR0cmlidXRlKS50
b1VybCgpOwotLSAKMS42LjMuMwoK
</data>
<flag name="review"
          id="25488"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="25508"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>