<?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>27655</bug_id>
          
          <creation_ts>2009-07-24 08:31:10 -0700</creation_ts>
          <short_desc>[v8] cache v8 strings when converting from webcore string to v8 string</short_desc>
          <delta_ts>2009-07-30 07:07:54 -0700</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 Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="anton muhin">antonm</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ager</cc>
    
    <cc>christian.plesner.hansen</cc>
    
    <cc>dglazkov</cc>
    
    <cc>levin</cc>
    
    <cc>vitalyr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134568</commentid>
    <comment_count>0</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-24 08:31:10 -0700</bug_when>
    <thetext>Let&apos;s not create many external v8 strings for the same WebCore::StringImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134572</commentid>
    <comment_count>1</comment_count>
      <attachid>33453</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-24 08:51:42 -0700</bug_when>
    <thetext>Created attachment 33453
Initial version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134587</commentid>
    <comment_count>2</comment_count>
      <attachid>33453</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-24 09:49:51 -0700</bug_when>
    <thetext>Comment on attachment 33453
Initial version

Just a few things to clean up.

&gt; Index: third_party/WebKit/WebCore/bindings/v8/V8Binding.cpp

&gt; +HashMap&lt;StringImpl*, v8::String*&gt; stringCache;

Better to use DEFINE_STATE_LOCAL.  (Then it is allocated on demand instead of at start up and it won&apos;t have to get deleted on shutdown. You could make some statically linked function to expose this.)

&gt; +
&gt; +static void cachedStringCallback(v8::Persistent&lt;v8::Value&gt; wrapper, void* parameter)
&gt; +{

Assert that this is only called on the main thread (since HashMap isn&apos;t threadsafe).

&gt; +    StringImpl* stringImpl = static_cast&lt;StringImpl*&gt;(parameter);
&gt; +    ASSERT(stringCache.contains(stringImpl));
&gt; +    stringCache.remove(stringImpl);
&gt; +    wrapper.Dispose();
&gt;  }
&gt;  
&gt;  v8::Local&lt;v8::String&gt; v8ExternalString(const String&amp; string)

A &quot;to&quot; prefix is usually used on conversion functions like this.  (Or perhaps you want findCachedV8String?)

&gt;  {

Assert that this is only called on the main thread (since HashMap isn&apos;t threadsafe). (As long as, that&apos;s true.)

&gt; +
&gt; +    StringImpl* stringImpl = string.impl();
&gt; +    v8::String* s = stringCache.get(stringImpl);
&gt; +    if (s) return v8::Local&lt;v8::String&gt;(s);

Avoid abbreviations:
s/s/cachedV8String/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134759</commentid>
    <comment_count>3</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-25 13:51:08 -0700</bug_when>
    <thetext>David, thanks a lot for review!  I would address your comments on Monday.  For now I&apos;d be really glad to hear your (and all others) opinion on threading stuff.  I didn&apos;t mentioned when posting a patch (sorry), but actually I know too little to implement it correctly.  First of all, I&apos;d expect worker threads to access this code (I&apos;m not 100% sure, but I&apos;d rather not hard code this assumption).  I don&apos;t know if it&apos;s safe to use v8 string from different threads.  If it&apos;s the case, I&apos;d only protect the cache with a mutex.  If it&apos;s not it looks like we need thread locals caches.  But I&apos;d be glad to hear from people with more experience in DOM bindings threading issues.

(In reply to comment #2)
&gt; (From update of attachment 33453 [details])
&gt; Just a few things to clean up.
&gt; 
&gt; &gt; Index: third_party/WebKit/WebCore/bindings/v8/V8Binding.cpp
&gt; 
&gt; &gt; +HashMap&lt;StringImpl*, v8::String*&gt; stringCache;
&gt; 
&gt; Better to use DEFINE_STATE_LOCAL.  (Then it is allocated on demand instead of
&gt; at start up and it won&apos;t have to get deleted on shutdown. You could make some
&gt; statically linked function to expose this.)
&gt; 
&gt; &gt; +
&gt; &gt; +static void cachedStringCallback(v8::Persistent&lt;v8::Value&gt; wrapper, void* parameter)
&gt; &gt; +{
&gt; 
&gt; Assert that this is only called on the main thread (since HashMap isn&apos;t
&gt; threadsafe).
&gt; 
&gt; &gt; +    StringImpl* stringImpl = static_cast&lt;StringImpl*&gt;(parameter);
&gt; &gt; +    ASSERT(stringCache.contains(stringImpl));
&gt; &gt; +    stringCache.remove(stringImpl);
&gt; &gt; +    wrapper.Dispose();
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  v8::Local&lt;v8::String&gt; v8ExternalString(const String&amp; string)
&gt; 
&gt; A &quot;to&quot; prefix is usually used on conversion functions like this.  (Or perhaps
&gt; you want findCachedV8String?)
&gt; 
&gt; &gt;  {
&gt; 
&gt; Assert that this is only called on the main thread (since HashMap isn&apos;t
&gt; threadsafe). (As long as, that&apos;s true.)
&gt; 
&gt; &gt; +
&gt; &gt; +    StringImpl* stringImpl = string.impl();
&gt; &gt; +    v8::String* s = stringCache.get(stringImpl);
&gt; &gt; +    if (s) return v8::Local&lt;v8::String&gt;(s);
&gt; 
&gt; Avoid abbreviations:
&gt; s/s/cachedV8String/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134856</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-27 01:06:45 -0700</bug_when>
    <thetext>&gt; I don&apos;t know if it&apos;s safe to use v8 string from different threads.

I don&apos;t know about v8 strings, but StringImpl is certainly not safe for use on multiple threads.

&gt;  If it&apos;s the case, I&apos;d only protect the cache with a mutex. 

That should work for the HashMap (but not the StringImpl in it).

&gt; If it&apos;s not, it looks like we need thread locals caches.

You may want to add to WebCore/platform/ThreadGlobalData.h


fyi, I&apos;ve not had time to look into it, but the function v8ValueToWebCoreString in V8Binding.cpp has similar concerns due to its use of AtomicString which may not be used across multiple threads.  (I don&apos;t know if this can be used from workers but if it can be, then it should be fixed as well.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135173</commentid>
    <comment_count>5</comment_count>
      <attachid>33619</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-28 06:15:08 -0700</bug_when>
    <thetext>Created attachment 33619
Next iteration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135174</commentid>
    <comment_count>6</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-28 06:22:30 -0700</bug_when>
    <thetext>David, all, sorry for delay

(In reply to comment #2)
&gt; (From update of attachment 33453 [details])
&gt; Just a few things to clean up.
&gt; 
&gt; &gt; Index: third_party/WebKit/WebCore/bindings/v8/V8Binding.cpp
&gt; 
&gt; &gt; +HashMap&lt;StringImpl*, v8::String*&gt; stringCache;
&gt; 
&gt; Better to use DEFINE_STATE_LOCAL.  (Then it is allocated on demand instead of
&gt; at start up and it won&apos;t have to get deleted on shutdown. You could make some
&gt; statically linked function to expose this.)
&gt; 

Done.  I just wanted to keep the code for main thread as fast as possible.

&gt; &gt; +
&gt; &gt; +static void cachedStringCallback(v8::Persistent&lt;v8::Value&gt; wrapper, void* parameter)
&gt; &gt; +{
&gt; 
&gt; Assert that this is only called on the main thread (since HashMap isn&apos;t
&gt; threadsafe).

Now not applicable as I have (hopefully) proper support for several threads.

&gt; 
&gt; &gt; +    StringImpl* stringImpl = static_cast&lt;StringImpl*&gt;(parameter);
&gt; &gt; +    ASSERT(stringCache.contains(stringImpl));
&gt; &gt; +    stringCache.remove(stringImpl);
&gt; &gt; +    wrapper.Dispose();
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  v8::Local&lt;v8::String&gt; v8ExternalString(const String&amp; string)
&gt; 
&gt; A &quot;to&quot; prefix is usually used on conversion functions like this.  (Or perhaps
&gt; you want findCachedV8String?)

David, that&apos;s a part of v8 bindings API.  May we postpone it for another CL (if to touch it at all)?

&gt; 
&gt; &gt;  {
&gt; 
&gt; Assert that this is only called on the main thread (since HashMap isn&apos;t
&gt; threadsafe). (As long as, that&apos;s true.)

See above.

&gt; 
&gt; &gt; +
&gt; &gt; +    StringImpl* stringImpl = string.impl();
&gt; &gt; +    v8::String* s = stringCache.get(stringImpl);
&gt; &gt; +    if (s) return v8::Local&lt;v8::String&gt;(s);
&gt; 
&gt; Avoid abbreviations:
&gt; s/s/cachedV8String/

Done.

Replying to second batch of comments in the corresponding place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135175</commentid>
    <comment_count>7</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-28 06:26:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; I don&apos;t know if it&apos;s safe to use v8 string from different threads.
&gt; 
&gt; I don&apos;t know about v8 strings, but StringImpl is certainly not safe for use on
&gt; multiple threads.

Thanks a lot for explanations.  Looks like I have no option but to have per thread caches (see the latest patch).  Does it look correct?

&gt; 
&gt; &gt;  If it&apos;s the case, I&apos;d only protect the cache with a mutex. 
&gt; 
&gt; That should work for the HashMap (but not the StringImpl in it).

I see, tnx.

&gt; &gt; If it&apos;s not, it looks like we need thread locals caches.
&gt; 
&gt; You may want to add to WebCore/platform/ThreadGlobalData.h

I need your advice here.  There is another place in v8 bindings which has thread local storage---V8DOMMap.  However, they don&apos;t keep this stuff into ThreadGlobalData either (that&apos;s why I decided to keep it &apos;local&apos; as well).  Overall, I don&apos;t see any V8 specific parts in ThreadGlobablData.  Do you think it&apos;s an oversight and should be fixed?

&gt; 
&gt; 
&gt; fyi, I&apos;ve not had time to look into it, but the function v8ValueToWebCoreString
&gt; in V8Binding.cpp has similar concerns due to its use of AtomicString which may
&gt; not be used across multiple threads.  (I don&apos;t know if this can be used from
&gt; workers but if it can be, then it should be fixed as well.)

Thank you very much for spotting this.  Christian is working on this part and has a CL under review, maybe it&apos;d be more convenient if he fixes it as well.

Thank you very much for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135229</commentid>
    <comment_count>8</comment_count>
      <attachid>33619</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-28 08:48:17 -0700</bug_when>
    <thetext>Comment on attachment 33619
Next iteration

&quot;
&gt; +#include &quot;StringHash.h&quot;
&gt; +#include &quot;Threading.h&quot;
&gt; +#include &quot;ThreadSpecific.h&quot;

Case sensitive sorting, so it should be:

#include &quot;ThreadSpecific.h&quot;
#include &quot;Threading.h&quot;


&gt; +// Returns thread-specific version of string cache
&gt; +static StringCache&amp; getStringCache()
&gt; +{
&gt; +    if (WTF::isMainThread())
&gt; +    {
&gt; +        DEFINE_STATIC_LOCAL(StringCache, mainThreadStringCache, ());
&gt; +        return mainThreadStringCache;
&gt; +    }
&gt; +
&gt; +    DEFINE_STATIC_LOCAL(WTF::ThreadSpecific&lt;StringCache&gt;, threadStringCache, ());


This looks like it has a race condition. (specifically the allocation of ThreadSpecific&lt;StringCache&gt;.)
Please add a comment about why it isn&apos;t or consider switching to using AtomicallyInitializedStatic (from
wtf/Threading.h).

&gt; +static void cachedStringCallback(v8::Persistent&lt;v8::Value&gt; wrapper, void* parameter)
&gt; +{
&gt; +    StringImpl* stringImpl = static_cast&lt;StringImpl*&gt;(parameter);
&gt; +    ASSERT(getStringCache().contains(stringImpl));
&gt; +    getStringCache().remove(stringImpl);
&gt; +    wrapper.Dispose();
&gt; +    stringImpl-&gt;deref();

It is my understanding that v8 garbage collection may be done on any thread.  If that is the case, then the code would be broken because getStringCache() returns a thread specific value.

(Even if you got the right string cache, you&apos;d run into problems with StringCache and StringImpl::Deref not being threadsafe.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135234</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-28 08:56:10 -0700</bug_when>
    <thetext>&gt; There is another place in v8 bindings which has
&gt; thread local storage---V8DOMMap.  Do you think
&gt; it&apos;s an oversight and should be fixed?

Yes, if it can be used on multiple threads.  I happened to just come across this in a refactoring code review from abarth and flagged it which resulted in https://bugs.webkit.org/show_bug.cgi?id=27759


&gt; Overall, I don&apos;t see any V8 specific parts in ThreadGlobablData.  

This class was created afaik to reduce the number of thread local storage items, so I think it would be appropriate to add there and put the appropriate ifdef&apos;s for v8.  (Please look at the svn history of that file to double check its history to see if it seems appropriate.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135605</commentid>
    <comment_count>10</comment_count>
      <attachid>33718</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-29 09:29:37 -0700</bug_when>
    <thetext>Created attachment 33718
Next iteration

As was discussed by IM with David, for now I just put caching under a flag.  This flag would be turned on for renderer process in Chromium (but it default to false).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135623</commentid>
    <comment_count>11</comment_count>
      <attachid>33718</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-29 10:25:56 -0700</bug_when>
    <thetext>Comment on attachment 33718
Next iteration

&gt; Index: third_party/WebKit/WebCore/ChangeLog
&gt; +2009-07-24  Anton Muhin  &lt;antonm@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Cache v8 strings when converting from WebCore::String to v8 string.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=27655
&gt; +
&gt; +        * bindings/v8/V8Binding.cpp:
&gt; +        (WebCore::v8String):
&gt; +        (WebCore::cachedStringCallback):
&gt; +        (WebCore::v8ExternalString):

This needs to be updated.  Also per function comments are encourage for non-trivial changes to explain what changes you did to the functions.


&gt; Index: third_party/WebKit/WebCore/bindings/v8/V8Binding.cpp

&gt; +static bool stringImplCacheEnabled = false;
&gt; +
&gt; +void enableStringImplCache()
&gt; +{
&gt; +    stringImplCacheEnabled = true;
&gt; +}

We discussed a compile time flag or runtime.  After seeing this, I much prefer the compile time define because 
1. I think there are several places in the v8 bindings that will need this.
2. I don&apos;t think this is a runtime decision, and making it compile time will have the benefits of making the separate code pieces easier to see, reduce complexity of thinking about what happens if the flag is set after some class are done, get rid of an unnecessary branch in your code.

Perhaps:
  V8_SINGLE_THREADED
and only chrome builds define this.


&gt; +    v8::Persistent&lt;v8::String&gt; wrapper = v8::Persistent&lt;v8::String&gt;::New(newString);
&gt; +    if (wrapper.IsEmpty())
&gt; +        return newString;

Does &quot;wrapper.Dispose();&quot; need to be called before the return? (I&apos;m not totally familiar with persistent handles in v8.)


&gt; Index: third_party/WebKit/WebCore/bindings/v8/V8Binding.h
&gt; +    // Enables caching v8 wrappers created for WebCore::StringImpl.  Currently this cache requires
&gt; +    // all the calls (both to convert WebCore::String to v8::String and to GC the handle)
&gt; +    // to be peformed on the main thread.

typo: peformed
(just in case this comment is kept)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135816</commentid>
    <comment_count>12</comment_count>
      <attachid>33769</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-30 05:11:29 -0700</bug_when>
    <thetext>Created attachment 33769
Next iteration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135817</commentid>
    <comment_count>13</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-30 05:13:44 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 33718 [details])
&gt; &gt; Index: third_party/WebKit/WebCore/ChangeLog
&gt; &gt; +2009-07-24  Anton Muhin  &lt;antonm@chromium.org&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        Cache v8 strings when converting from WebCore::String to v8 string.
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=27655
&gt; &gt; +
&gt; &gt; +        * bindings/v8/V8Binding.cpp:
&gt; &gt; +        (WebCore::v8String):
&gt; &gt; +        (WebCore::cachedStringCallback):
&gt; &gt; +        (WebCore::v8ExternalString):
&gt; 
&gt; This needs to be updated.  Also per function comments are encourage for
&gt; non-trivial changes to explain what changes you did to the functions.

Hopefully done.  May you have look to see if they are sane.

&gt; 
&gt; 
&gt; &gt; Index: third_party/WebKit/WebCore/bindings/v8/V8Binding.cpp
&gt; 
&gt; &gt; +static bool stringImplCacheEnabled = false;
&gt; &gt; +
&gt; &gt; +void enableStringImplCache()
&gt; &gt; +{
&gt; &gt; +    stringImplCacheEnabled = true;
&gt; &gt; +}
&gt; 
&gt; We discussed a compile time flag or runtime.  After seeing this, I much prefer
&gt; the compile time define because 
&gt; 1. I think there are several places in the v8 bindings that will need this.
&gt; 2. I don&apos;t think this is a runtime decision, and making it compile time will
&gt; have the benefits of making the separate code pieces easier to see, reduce
&gt; complexity of thinking about what happens if the flag is set after some class
&gt; are done, get rid of an unnecessary branch in your code.
&gt; 
&gt; Perhaps:
&gt;   V8_SINGLE_THREADED
&gt; and only chrome builds define this.

I&apos;m lacking knowledge of our build process, but are you sure we have to separate binaries for worker and render?  I was under impression that the binary is the same and it flags which turn it into a worker or renderer process.

&gt; 
&gt; 
&gt; &gt; +    v8::Persistent&lt;v8::String&gt; wrapper = v8::Persistent&lt;v8::String&gt;::New(newString);
&gt; &gt; +    if (wrapper.IsEmpty())
&gt; &gt; +        return newString;
&gt; 
&gt; Does &quot;wrapper.Dispose();&quot; need to be called before the return? (I&apos;m not totally
&gt; familiar with persistent handles in v8.)
&gt; \

AFAIK no.

&gt; 
&gt; &gt; Index: third_party/WebKit/WebCore/bindings/v8/V8Binding.h
&gt; &gt; +    // Enables caching v8 wrappers created for WebCore::StringImpl.  Currently this cache requires
&gt; &gt; +    // all the calls (both to convert WebCore::String to v8::String and to GC the handle)
&gt; &gt; +    // to be peformed on the main thread.
&gt; 
&gt; typo: peformed
&gt; (just in case this comment is kept)

Tnx, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135835</commentid>
    <comment_count>14</comment_count>
      <attachid>33769</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-30 06:24:40 -0700</bug_when>
    <thetext>Comment on attachment 33769
Next iteration

Last thing to fix....(the paths for the files).

&gt; Index: third_party/WebKit/WebCore/ChangeLog
You seem to be creating these patches from outside of your WebKit enlistment.

These lines should start with WebCore (or else committing them is going to be annoying).

If you create the patch when you are in the third_party/WebKit directory this should all work. Alternately, you could just carefully edit the patch by hand.

&gt; ===================================================================
&gt; --- third_party/WebKit/WebCore/ChangeLog	(revision 46575)
&gt; +++ third_party/WebKit/WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,24 @@
&gt; +2009-07-30  Anton Muhin  &lt;antonm@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Cache v8 strings when converting from WebCore::String to v8 string.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=27655
&gt; +
&gt; +        * bindings/v8/V8Binding.cpp:
&gt; +        (WebCore::v8String): now just immediately calls v8ExternalString
&gt; +        (WebCore::enableStringImplCache): enables caching of conversions from WebCore::StringImpl to
&gt; +        v8::String
&gt; +        (WebCore::makeExternalString): utilty function to create external v8::String out of
&gt; +        WebCore::Strin
typo: Strin

I can fix this on landing, but if you upload a new patch, it would be nice to fix it.


&gt; I&apos;m lacking knowledge of our build process, but are you sure we have to
&gt; separate binaries for worker and render?  I was under impression that the
&gt; binary is the same and it flags which turn it into a worker or renderer
&gt; process.

Yes. Note: Workers in chromium only run one thread, but we can leave this as a runtime flag as it all appears to work.

The api feels a bit narrow in scope &quot;enableStringImplCache&quot; vs &quot;setSingleThreadedMode&quot;, but this is fine. It can be broadened if there is ever any other code that needs this info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135837</commentid>
    <comment_count>15</comment_count>
      <attachid>33776</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-30 06:59:36 -0700</bug_when>
    <thetext>Created attachment 33776
Next iteration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135838</commentid>
    <comment_count>16</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-30 07:02:43 -0700</bug_when>
    <thetext>David, thanks a lot!

(In reply to comment #14)
&gt; (From update of attachment 33769 [details])
&gt; Last thing to fix....(the paths for the files).
&gt; 
&gt; &gt; Index: third_party/WebKit/WebCore/ChangeLog
&gt; You seem to be creating these patches from outside of your WebKit enlistment.
&gt; 
&gt; These lines should start with WebCore (or else committing them is going to be
&gt; annoying).
&gt; 
&gt; If you create the patch when you are in the third_party/WebKit directory this
&gt; should all work. Alternately, you could just carefully edit the patch by hand.

svn-create-patch doesn&apos;t quite work for me (or I just misuse it).  Tried to manually fix it, sorry if missed anything.

&gt; 
&gt; &gt; ===================================================================
&gt; &gt; --- third_party/WebKit/WebCore/ChangeLog	(revision 46575)
&gt; &gt; +++ third_party/WebKit/WebCore/ChangeLog	(working copy)
&gt; &gt; @@ -1,3 +1,24 @@
&gt; &gt; +2009-07-30  Anton Muhin  &lt;antonm@chromium.org&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        Cache v8 strings when converting from WebCore::String to v8 string.
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=27655
&gt; &gt; +
&gt; &gt; +        * bindings/v8/V8Binding.cpp:
&gt; &gt; +        (WebCore::v8String): now just immediately calls v8ExternalString
&gt; &gt; +        (WebCore::enableStringImplCache): enables caching of conversions from WebCore::StringImpl to
&gt; &gt; +        v8::String
&gt; &gt; +        (WebCore::makeExternalString): utilty function to create external v8::String out of
&gt; &gt; +        WebCore::Strin
&gt; typo: Strin
&gt; 
&gt; I can fix this on landing, but if you upload a new patch, it would be nice to
&gt; fix it.

Fixed.

&gt; 
&gt; 
&gt; &gt; I&apos;m lacking knowledge of our build process, but are you sure we have to
&gt; &gt; separate binaries for worker and render?  I was under impression that the
&gt; &gt; binary is the same and it flags which turn it into a worker or renderer
&gt; &gt; process.
&gt; 
&gt; Yes. Note: Workers in chromium only run one thread, but we can leave this as a
&gt; runtime flag as it all appears to work.
&gt; 
&gt; The api feels a bit narrow in scope &quot;enableStringImplCache&quot; vs
&gt; &quot;setSingleThreadedMode&quot;, but this is fine. It can be broadened if there is ever
&gt; any other code that needs this info.

So as was discussed over IM, let&apos;s leave it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135840</commentid>
    <comment_count>17</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-30 07:07:54 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/46580</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33453</attachid>
            <date>2009-07-24 08:51:42 -0700</date>
            <delta_ts>2009-07-28 06:15:08 -0700</delta_ts>
            <desc>Initial version</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>2496</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2MzU0KQor
KysgdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDctMjQgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWNoZSB2OCBzdHJpbmdzIHdoZW4gY29udmVydGluZyBmcm9tIFdlYkNvcmU6OlN0cmluZyB0byB2
OCBzdHJpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzY1NQorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnY4U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZFN0cmluZ0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnY4RXh0ZXJuYWxTdHJpbmcpOgorCiAyMDA5LTA3LTI0
ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBCdWlsZCBmaXggZm9yIDY0IGJpdCBMaW51eC4KSW5kZXg6IHRoaXJkX3BhcnR5L1dlYktp
dC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGhpcmRf
cGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAkocmV2aXNpb24g
NDYyODgpCisrKyB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTWF0aEV4
dHJhcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVm
ZmVyLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogCiAjaW5jbHVkZSA8djguaD4KIApAQCAt
MTQyLDE2ICsxNDMsMzQgQEAgQXRvbWljU3RyaW5nIHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJp
bgogCiB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogewotICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gdjg6OlN0cmlu
Zzo6RW1wdHkoKTsKLSAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwobmV3IFdlYkNv
cmVTdHJpbmdSZXNvdXJjZShzdHJpbmcpKTsKKyAgICByZXR1cm4gdjhFeHRlcm5hbFN0cmluZyhz
dHJpbmcpOworfQorCitIYXNoTWFwPFN0cmluZ0ltcGwqLCB2ODo6U3RyaW5nKj4gc3RyaW5nQ2Fj
aGU7CisKK3N0YXRpYyB2b2lkIGNhY2hlZFN0cmluZ0NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4gd3JhcHBlciwgdm9pZCogcGFyYW1ldGVyKQoreworICAgIFN0cmluZ0ltcGwqIHN0
cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4ocGFyYW1ldGVyKTsKKyAgICBBU1NF
UlQoc3RyaW5nQ2FjaGUuY29udGFpbnMoc3RyaW5nSW1wbCkpOworICAgIHN0cmluZ0NhY2hlLnJl
bW92ZShzdHJpbmdJbXBsKTsKKyAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKIH0KIAogdjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0g
ICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5
KCk7Ci0gICAgcmV0dXJuIHY4OjpTdHJpbmc6Ok5ld0V4dGVybmFsKG5ldyBXZWJDb3JlU3RyaW5n
UmVzb3VyY2Uoc3RyaW5nKSk7CisKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5n
LmltcGwoKTsKKyAgICB2ODo6U3RyaW5nKiBzID0gc3RyaW5nQ2FjaGUuZ2V0KHN0cmluZ0ltcGwp
OworICAgIGlmIChzKSByZXR1cm4gdjg6OkxvY2FsPHY4OjpTdHJpbmc+KHMpOworCisgICAgdjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5ld1N0cmluZyA9IHY4OjpTdHJpbmc6Ok5ld0V4dGVybmFsKG5l
dyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3RyaW5nKSk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OlN0cmluZz4gd3JhcHBlciA9IHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+OjpOZXcobmV3U3Ry
aW5nKTsKKyAgICB3cmFwcGVyLk1ha2VXZWFrKHN0cmluZ0ltcGwsIGNhY2hlZFN0cmluZ0NhbGxi
YWNrKTsKKyAgICBzdHJpbmdDYWNoZS5zZXQoc3RyaW5nSW1wbCwgKndyYXBwZXIpOworICAgIHJl
dHVybiBuZXdTdHJpbmc7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="17736"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33619</attachid>
            <date>2009-07-28 06:15:08 -0700</date>
            <delta_ts>2009-07-30 05:11:29 -0700</delta_ts>
            <desc>Next iteration</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>3344</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2NDI2KQor
KysgdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDctMjQgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWNoZSB2OCBzdHJpbmdzIHdoZW4gY29udmVydGluZyBmcm9tIFdlYkNvcmU6OlN0cmluZyB0byB2
OCBzdHJpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzY1NQorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnY4U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZFN0cmluZ0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnY4RXh0ZXJuYWxTdHJpbmcpOgorCiAyMDA5LTA3LTI3
ICBBbGJlcnQgSi4gV29uZyAgPGFqd29uZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRoaXJkX3BhcnR5L1dlYktpdC9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHJldmlzaW9uIDQ2NDI2KQorKysgdGhp
cmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
U3RkTGliRXh0cmFzLmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCisjaW5jbHVkZSAiU3Ry
aW5nSGFzaC5oIgorI2luY2x1ZGUgIlRocmVhZGluZy5oIgorI2luY2x1ZGUgIlRocmVhZFNwZWNp
ZmljLmgiCiAKICNpbmNsdWRlIDx2OC5oPgogCkBAIC0xNDIsMTYgKzE0Niw2MiBAQCBBdG9taWNT
dHJpbmcgdjhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluCiAKIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gdjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgaWYgKCFzdHJpbmcubGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybiB2ODo6U3RyaW5nOjpFbXB0eSgpOwotICAgIHJldHVybiB2
ODo6U3RyaW5nOjpOZXdFeHRlcm5hbChuZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHN0cmluZykp
OworICAgIHJldHVybiB2OEV4dGVybmFsU3RyaW5nKHN0cmluZyk7Cit9CisKK3R5cGVkZWYgSGFz
aE1hcDxTdHJpbmdJbXBsKiwgdjg6OlN0cmluZyo+IFN0cmluZ0NhY2hlOworCisvLyBSZXR1cm5z
IHRocmVhZC1zcGVjaWZpYyB2ZXJzaW9uIG9mIHN0cmluZyBjYWNoZQorc3RhdGljIFN0cmluZ0Nh
Y2hlJiBnZXRTdHJpbmdDYWNoZSgpCit7CisgICAgaWYgKFdURjo6aXNNYWluVGhyZWFkKCkpCisg
ICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZ0NhY2hlLCBtYWluVGhyZWFk
U3RyaW5nQ2FjaGUsICgpKTsKKyAgICAgICAgcmV0dXJuIG1haW5UaHJlYWRTdHJpbmdDYWNoZTsK
KyAgICB9CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdURjo6VGhyZWFkU3BlY2lmaWM8U3Ry
aW5nQ2FjaGU+LCB0aHJlYWRTdHJpbmdDYWNoZSwgKCkpOworICAgIHJldHVybiAqdGhyZWFkU3Ry
aW5nQ2FjaGU7Cit9CisKK3N0YXRpYyB2b2lkIGNhY2hlZFN0cmluZ0NhbGxiYWNrKHY4OjpQZXJz
aXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciwgdm9pZCogcGFyYW1ldGVyKQoreworICAgIFN0cmlu
Z0ltcGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4ocGFyYW1ldGVyKTsK
KyAgICBBU1NFUlQoZ2V0U3RyaW5nQ2FjaGUoKS5jb250YWlucyhzdHJpbmdJbXBsKSk7CisgICAg
Z2V0U3RyaW5nQ2FjaGUoKS5yZW1vdmUoc3RyaW5nSW1wbCk7CisgICAgd3JhcHBlci5EaXNwb3Nl
KCk7CisgICAgc3RyaW5nSW1wbC0+ZGVyZWYoKTsKIH0KIAogdjg6OkxvY2FsPHY4OjpTdHJpbmc+
IHY4RXh0ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgaWYgKCFzdHJp
bmcubGVuZ3RoKCkpCisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBp
ZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KCk7Ci0gICAgcmV0
dXJuIHY4OjpTdHJpbmc6Ok5ld0V4dGVybmFsKG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3Ry
aW5nKSk7CisKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsKKyAg
ICBTdHJpbmdDYWNoZSYgc3RyaW5nQ2FjaGUgPSBnZXRTdHJpbmdDYWNoZSgpOworICAgIHY4OjpT
dHJpbmcqIGNhY2hlZFY4U3RyaW5nID0gc3RyaW5nQ2FjaGUuZ2V0KHN0cmluZ0ltcGwpOworICAg
IGlmIChjYWNoZWRWOFN0cmluZykKKyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6U3RyaW5n
PihjYWNoZWRWOFN0cmluZyk7CisKKyAgICBXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHN0cmluZ1Jl
c291cmNlID0gbmV3IFdlYkNvcmVTdHJpbmdSZXNvdXJjZShzdHJpbmcpOworICAgIHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuZXdTdHJpbmcgPSB2ODo6U3RyaW5nOjpOZXdFeHRlcm5hbChzdHJpbmdS
ZXNvdXJjZSk7CisgICAgaWYgKG5ld1N0cmluZy5Jc0VtcHR5KCkpCisgICAgeworICAgICAgICBk
ZWxldGUgc3RyaW5nUmVzb3VyY2U7CisgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CisgICAgfQor
CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz4gd3JhcHBlciA9IHY4OjpQZXJzaXN0ZW50
PHY4OjpTdHJpbmc+OjpOZXcobmV3U3RyaW5nKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CisKKyAgICBzdHJpbmdJbXBsLT5yZWYoKTsKKyAg
ICB3cmFwcGVyLk1ha2VXZWFrKHN0cmluZ0ltcGwsIGNhY2hlZFN0cmluZ0NhbGxiYWNrKTsKKyAg
ICBzdHJpbmdDYWNoZS5zZXQoc3RyaW5nSW1wbCwgKndyYXBwZXIpOworCisgICAgcmV0dXJuIG5l
d1N0cmluZzsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="17865"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33718</attachid>
            <date>2009-07-29 09:29:37 -0700</date>
            <delta_ts>2009-07-30 05:11:29 -0700</delta_ts>
            <desc>Next iteration</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>4474</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2NTMxKQor
KysgdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDctMjQgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWNoZSB2OCBzdHJpbmdzIHdoZW4gY29udmVydGluZyBmcm9tIFdlYkNvcmU6OlN0cmluZyB0byB2
OCBzdHJpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzY1NQorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnY4U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZFN0cmluZ0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnY4RXh0ZXJuYWxTdHJpbmcpOgorCiAyMDA5LTA3LTI5
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBi
dWlsZCBmaXggZm9yIENocm9taXVtLiAgVGhvc2UgbGFzdCB0d28gcGF0Y2hlcyB3ZXJlbid0Cklu
ZGV4OiB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5jcHAJKHJldmlzaW9uIDQ2NTMxKQorKysgdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
MTAgQEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCiAjaW5j
bHVkZSAiU3RyaW5nQnVmZmVyLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUg
IlRocmVhZGluZy5oIgogCiAjaW5jbHVkZSA8djguaD4KIApAQCAtMTQyLDE2ICsxNDUsNzIgQEAg
QXRvbWljU3RyaW5nIHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbgogCiB2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IHY4U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGlmICghc3Ry
aW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gdjg6OlN0cmluZzo6RW1wdHkoKTsKLSAgICBy
ZXR1cm4gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwobmV3IFdlYkNvcmVTdHJpbmdSZXNvdXJjZShz
dHJpbmcpKTsKKyAgICByZXR1cm4gdjhFeHRlcm5hbFN0cmluZyhzdHJpbmcpOworfQorCitzdGF0
aWMgYm9vbCBzdHJpbmdJbXBsQ2FjaGVFbmFibGVkID0gZmFsc2U7CisKK3ZvaWQgZW5hYmxlU3Ry
aW5nSW1wbENhY2hlKCkKK3sKKyAgICBzdHJpbmdJbXBsQ2FjaGVFbmFibGVkID0gdHJ1ZTsKK30K
Kworc3RhdGljIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBtYWtlRXh0ZXJuYWxTdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCit7CisgICAgV2ViQ29yZVN0cmluZ1Jlc291cmNlKiBzdHJpbmdSZXNv
dXJjZSA9IG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3RyaW5nKTsKKyAgICB2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmV3U3RyaW5nID0gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwoc3RyaW5nUmVz
b3VyY2UpOworICAgIGlmIChuZXdTdHJpbmcuSXNFbXB0eSgpKQorICAgICAgICBkZWxldGUgc3Ry
aW5nUmVzb3VyY2U7CisKKyAgICByZXR1cm4gbmV3U3RyaW5nOworfQorCit0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nSW1wbCosIHY4OjpTdHJpbmcqPiBTdHJpbmdDYWNoZTsKKworc3RhdGljIFN0cmlu
Z0NhY2hlJiBnZXRTdHJpbmdDYWNoZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFk
KCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nQ2FjaGUsIG1haW5UaHJlYWRTdHJp
bmdDYWNoZSwgKCkpOworICAgIHJldHVybiBtYWluVGhyZWFkU3RyaW5nQ2FjaGU7Cit9CisKK3N0
YXRpYyB2b2lkIGNhY2hlZFN0cmluZ0NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4g
d3JhcHBlciwgdm9pZCogcGFyYW1ldGVyKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1w
bCo+KHBhcmFtZXRlcik7CisgICAgQVNTRVJUKGdldFN0cmluZ0NhY2hlKCkuY29udGFpbnMoc3Ry
aW5nSW1wbCkpOworICAgIGdldFN0cmluZ0NhY2hlKCkucmVtb3ZlKHN0cmluZ0ltcGwpOworICAg
IHdyYXBwZXIuRGlzcG9zZSgpOworICAgIHN0cmluZ0ltcGwtPmRlcmVmKCk7CiB9CiAKIHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQog
ewogICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gdjg6OlN0cmluZzo6
RW1wdHkoKTsKLSAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwobmV3IFdlYkNvcmVT
dHJpbmdSZXNvdXJjZShzdHJpbmcpKTsKKworICAgIGlmICghc3RyaW5nSW1wbENhY2hlRW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuIG1ha2VFeHRlcm5hbFN0cmluZyhzdHJpbmcpOworCisgICAgU3Ry
aW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7CisgICAgU3RyaW5nQ2FjaGUmIHN0
cmluZ0NhY2hlID0gZ2V0U3RyaW5nQ2FjaGUoKTsKKyAgICB2ODo6U3RyaW5nKiBjYWNoZWRWOFN0
cmluZyA9IHN0cmluZ0NhY2hlLmdldChzdHJpbmdJbXBsKTsKKyAgICBpZiAoY2FjaGVkVjhTdHJp
bmcpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OlN0cmluZz4oY2FjaGVkVjhTdHJpbmcp
OworCisgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5ld1N0cmluZyA9IG1ha2VFeHRlcm5hbFN0
cmluZyhzdHJpbmcpOworICAgIGlmIChuZXdTdHJpbmcuSXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbmV3U3RyaW5nOworCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz4gd3JhcHBlciA9
IHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+OjpOZXcobmV3U3RyaW5nKTsKKyAgICBpZiAod3Jh
cHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CisKKyAgICBzdHJpbmdJ
bXBsLT5yZWYoKTsKKyAgICB3cmFwcGVyLk1ha2VXZWFrKHN0cmluZ0ltcGwsIGNhY2hlZFN0cmlu
Z0NhbGxiYWNrKTsKKyAgICBzdHJpbmdDYWNoZS5zZXQoc3RyaW5nSW1wbCwgKndyYXBwZXIpOwor
CisgICAgcmV0dXJuIG5ld1N0cmluZzsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmgJKHJldmlzaW9uIDQ2NTMxKQorKysgdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyB1bmRlcmx5aW5nIGJ1ZmZlciBhbGl2ZSB3aGlsZSB0
aGUgc3RyaW5nIGlzIHN0aWxsIGxpdmUgaW4gdGhlIFY4IGVuZ2luZS4KICAgICB2ODo6TG9jYWw8
djg6OlN0cmluZz4gdjhFeHRlcm5hbFN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAorICAgIC8vIEVu
YWJsZXMgY2FjaGluZyB2OCB3cmFwcGVycyBjcmVhdGVkIGZvciBXZWJDb3JlOjpTdHJpbmdJbXBs
LiAgQ3VycmVudGx5IHRoaXMgY2FjaGUgcmVxdWlyZXMKKyAgICAvLyBhbGwgdGhlIGNhbGxzIChi
b3RoIHRvIGNvbnZlcnQgV2ViQ29yZTo6U3RyaW5nIHRvIHY4OjpTdHJpbmcgYW5kIHRvIEdDIHRo
ZSBoYW5kbGUpCisgICAgLy8gdG8gYmUgcGVmb3JtZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAg
IHZvaWQgZW5hYmxlU3RyaW5nSW1wbENhY2hlKCk7CisKICAgICAvLyBDb252ZXJ0IGEgdmFsdWUg
dG8gYSAzMi1iaXQgaW50ZWdlci4gIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZQogICAgIC8v
IHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBvciBjb252ZXJ0cyB0byBu
YW4gb3IgdG8gYW4gaW5maW5pdHkuCiAgICAgaW5saW5lIGludCB0b0ludDMyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCg==
</data>
<flag name="review"
          id="17928"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33769</attachid>
            <date>2009-07-30 05:11:29 -0700</date>
            <delta_ts>2009-07-30 06:59:36 -0700</delta_ts>
            <desc>Next iteration</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>5082</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2NTc1KQor
KysgdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDktMDctMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWNoZSB2OCBzdHJpbmdzIHdoZW4gY29udmVydGluZyBmcm9tIFdlYkNvcmU6OlN0cmluZyB0byB2
OCBzdHJpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzY1NQorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnY4U3RyaW5nKTogbm93IGp1c3QgaW1tZWRpYXRlbHkgY2FsbHMgdjhFeHRlcm5h
bFN0cmluZworICAgICAgICAoV2ViQ29yZTo6ZW5hYmxlU3RyaW5nSW1wbENhY2hlKTogZW5hYmxl
cyBjYWNoaW5nIG9mIGNvbnZlcnNpb25zIGZyb20gV2ViQ29yZTo6U3RyaW5nSW1wbCB0bworICAg
ICAgICB2ODo6U3RyaW5nCisgICAgICAgIChXZWJDb3JlOjptYWtlRXh0ZXJuYWxTdHJpbmcpOiB1
dGlsdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGV4dGVybmFsIHY4OjpTdHJpbmcgb3V0IG9mCisgICAg
ICAgIFdlYkNvcmU6OlN0cmluCisgICAgICAgIChXZWJDb3JlOjpnZXRTdHJpbmdDYWNoZSk6IHN0
YXRpYyBmdW5jdGlvbiB0byBhY2Nlc3Mgc3RyaW5nIGNhY2hlCisgICAgICAgIChXZWJDb3JlOjpj
YWNoZWRTdHJpbmdDYWxsYmFjayk6IGNhbGxiYWNrIGZvciB3ZWFrIGhhbmRsZXMgb2Ygdjg6OlN0
cmluZ3Mgc3RvcmVkIGluIHRoZQorICAgICAgICBjYWNoZQorICAgICAgICAoV2ViQ29yZTo6djhF
eHRlcm5hbFN0cmluZyk6IGlmIGNhY2hpbmcgZW5hYmxlZCwgY2hlY2tzIGlmIHRoZXJlIGlzIGFs
cmVhZHkgdjg6OlN0cmluZyBmb3IKKyAgICAgICAgdGhlIGdpdmVuIFdlYkNvcmU6OlN0cmluZ0lt
cGwuICBJZiBwcmVzZW50LCByZXR1cm5zIGl0LCBvdGhlcndpc2UgY3JlYXRlcyBhIG5ldyB2OCBl
eHRlcm5hbAorICAgICAgICBzdHJpbmcuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5n
Lmg6CisKIDIwMDktMDctMzAgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRleDogdGhpcmRfcGFydHkvV2Vi
S2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0aGly
ZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCShyZXZpc2lv
biA0NjU3MCkKKysrIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDEwIEBACiAjaW5jbHVkZSAiQ1N0
cmluZy5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlN0cmluZ0J1ZmZlci5o
IgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKIAogI2lu
Y2x1ZGUgPHY4Lmg+CiAKQEAgLTE0MiwxNiArMTQ1LDcyIEBAIEF0b21pY1N0cmluZyB2OFZhbHVl
VG9BdG9taWNXZWJDb3JlU3RyaW4KIAogdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KCk7Ci0gICAgcmV0dXJuIHY4OjpTdHJpbmc6Ok5l
d0V4dGVybmFsKG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3RyaW5nKSk7CisgICAgcmV0dXJu
IHY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nKTsKK30KKworc3RhdGljIGJvb2wgc3RyaW5nSW1wbENh
Y2hlRW5hYmxlZCA9IGZhbHNlOworCit2b2lkIGVuYWJsZVN0cmluZ0ltcGxDYWNoZSgpCit7Cisg
ICAgc3RyaW5nSW1wbENhY2hlRW5hYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2ODo6TG9jYWw8
djg6OlN0cmluZz4gbWFrZUV4dGVybmFsU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorewor
ICAgIFdlYkNvcmVTdHJpbmdSZXNvdXJjZSogc3RyaW5nUmVzb3VyY2UgPSBuZXcgV2ViQ29yZVN0
cmluZ1Jlc291cmNlKHN0cmluZyk7CisgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5ld1N0cmlu
ZyA9IHY4OjpTdHJpbmc6Ok5ld0V4dGVybmFsKHN0cmluZ1Jlc291cmNlKTsKKyAgICBpZiAobmV3
U3RyaW5nLklzRW1wdHkoKSkKKyAgICAgICAgZGVsZXRlIHN0cmluZ1Jlc291cmNlOworCisgICAg
cmV0dXJuIG5ld1N0cmluZzsKK30KKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCB2ODo6
U3RyaW5nKj4gU3RyaW5nQ2FjaGU7CisKK3N0YXRpYyBTdHJpbmdDYWNoZSYgZ2V0U3RyaW5nQ2Fj
aGUoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZ0NhY2hlLCBtYWluVGhyZWFkU3RyaW5nQ2FjaGUsICgpKTsKKyAgICBy
ZXR1cm4gbWFpblRocmVhZFN0cmluZ0NhY2hlOworfQorCitzdGF0aWMgdm9pZCBjYWNoZWRTdHJp
bmdDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIsIHZvaWQqIHBhcmFt
ZXRlcikKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgU3RyaW5nSW1w
bCogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihwYXJhbWV0ZXIpOworICAg
IEFTU0VSVChnZXRTdHJpbmdDYWNoZSgpLmNvbnRhaW5zKHN0cmluZ0ltcGwpKTsKKyAgICBnZXRT
dHJpbmdDYWNoZSgpLnJlbW92ZShzdHJpbmdJbXBsKTsKKyAgICB3cmFwcGVyLkRpc3Bvc2UoKTsK
KyAgICBzdHJpbmdJbXBsLT5kZXJlZigpOwogfQogCiB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhF
eHRlcm5hbFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBpZiAoIXN0cmluZy5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KCk7Ci0gICAgcmV0dXJu
IHY4OjpTdHJpbmc6Ok5ld0V4dGVybmFsKG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3RyaW5n
KSk7CisKKyAgICBpZiAoIXN0cmluZ0ltcGxDYWNoZUVuYWJsZWQpCisgICAgICAgIHJldHVybiBt
YWtlRXh0ZXJuYWxTdHJpbmcoc3RyaW5nKTsKKworICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwg
PSBzdHJpbmcuaW1wbCgpOworICAgIFN0cmluZ0NhY2hlJiBzdHJpbmdDYWNoZSA9IGdldFN0cmlu
Z0NhY2hlKCk7CisgICAgdjg6OlN0cmluZyogY2FjaGVkVjhTdHJpbmcgPSBzdHJpbmdDYWNoZS5n
ZXQoc3RyaW5nSW1wbCk7CisgICAgaWYgKGNhY2hlZFY4U3RyaW5nKQorICAgICAgICByZXR1cm4g
djg6OkxvY2FsPHY4OjpTdHJpbmc+KGNhY2hlZFY4U3RyaW5nKTsKKworICAgIHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuZXdTdHJpbmcgPSBtYWtlRXh0ZXJuYWxTdHJpbmcoc3RyaW5nKTsKKyAgICBp
ZiAobmV3U3RyaW5nLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKKworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6
U3RyaW5nPjo6TmV3KG5ld1N0cmluZyk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbmV3U3RyaW5nOworCisgICAgc3RyaW5nSW1wbC0+cmVmKCk7CisgICAgd3Jh
cHBlci5NYWtlV2VhayhzdHJpbmdJbXBsLCBjYWNoZWRTdHJpbmdDYWxsYmFjayk7CisgICAgc3Ry
aW5nQ2FjaGUuc2V0KHN0cmluZ0ltcGwsICp3cmFwcGVyKTsKKworICAgIHJldHVybiBuZXdTdHJp
bmc7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IHRoaXJkX3BhcnR5L1dlYktp
dC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRoaXJkX3Bh
cnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiA0NjU3
MCkKKysrIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgLy8gdW5kZXJseWluZyBidWZmZXIgYWxpdmUgd2hpbGUgdGhlIHN0cmluZyBpcyBzdGlsbCBs
aXZlIGluIHRoZSBWOCBlbmdpbmUuCiAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4RXh0ZXJu
YWxTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKKyAgICAvLyBFbmFibGVzIGNhY2hpbmcgdjggd3Jh
cHBlcnMgY3JlYXRlZCBmb3IgV2ViQ29yZTo6U3RyaW5nSW1wbC4gIEN1cnJlbnRseSB0aGlzIGNh
Y2hlIHJlcXVpcmVzCisgICAgLy8gYWxsIHRoZSBjYWxscyAoYm90aCB0byBjb252ZXJ0IFdlYkNv
cmU6OlN0cmluZyB0byB2ODo6U3RyaW5nIGFuZCB0byBHQyB0aGUgaGFuZGxlKQorICAgIC8vIHRv
IGJlIHBlcmZvcm1lZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgdm9pZCBlbmFibGVTdHJpbmdJ
bXBsQ2FjaGUoKTsKKwogICAgIC8vIENvbnZlcnQgYSB2YWx1ZSB0byBhIDMyLWJpdCBpbnRlZ2Vy
LiAgVGhlIGNvbnZlcnNpb24gZmFpbHMgaWYgdGhlCiAgICAgLy8gdmFsdWUgY2Fubm90IGJlIGNv
bnZlcnRlZCB0byBhbiBpbnRlZ2VyIG9yIGNvbnZlcnRzIHRvIG5hbiBvciB0byBhbiBpbmZpbml0
eS4KICAgICBpbmxpbmUgaW50IHRvSW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sJiBvaykK
</data>
<flag name="review"
          id="17973"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33776</attachid>
            <date>2009-07-30 06:59:36 -0700</date>
            <delta_ts>2009-07-30 07:02:50 -0700</delta_ts>
            <desc>Next iteration</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>4912</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDktMDctMzAgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWNoZSB2OCBzdHJpbmdzIHdoZW4gY29udmVydGluZyBmcm9tIFdlYkNvcmU6OlN0cmluZyB0byB2
OCBzdHJpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzY1NQorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnY4U3RyaW5nKTogbm93IGp1c3QgaW1tZWRpYXRlbHkgY2FsbHMgdjhFeHRlcm5h
bFN0cmluZworICAgICAgICAoV2ViQ29yZTo6ZW5hYmxlU3RyaW5nSW1wbENhY2hlKTogZW5hYmxl
cyBjYWNoaW5nIG9mIGNvbnZlcnNpb25zIGZyb20gV2ViQ29yZTo6U3RyaW5nSW1wbCB0bworICAg
ICAgICB2ODo6U3RyaW5nCisgICAgICAgIChXZWJDb3JlOjptYWtlRXh0ZXJuYWxTdHJpbmcpOiB1
dGlsdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGV4dGVybmFsIHY4OjpTdHJpbmcgb3V0IG9mCisgICAg
ICAgIFdlYkNvcmU6OlN0cmluZworICAgICAgICAoV2ViQ29yZTo6Z2V0U3RyaW5nQ2FjaGUpOiBz
dGF0aWMgZnVuY3Rpb24gdG8gYWNjZXNzIHN0cmluZyBjYWNoZQorICAgICAgICAoV2ViQ29yZTo6
Y2FjaGVkU3RyaW5nQ2FsbGJhY2spOiBjYWxsYmFjayBmb3Igd2VhayBoYW5kbGVzIG9mIHY4OjpT
dHJpbmdzIHN0b3JlZCBpbiB0aGUKKyAgICAgICAgY2FjaGUKKyAgICAgICAgKFdlYkNvcmU6OnY4
RXh0ZXJuYWxTdHJpbmcpOiBpZiBjYWNoaW5nIGVuYWJsZWQsIGNoZWNrcyBpZiB0aGVyZSBpcyBh
bHJlYWR5IHY4OjpTdHJpbmcgZm9yCisgICAgICAgIHRoZSBnaXZlbiBXZWJDb3JlOjpTdHJpbmdJ
bXBsLiAgSWYgcHJlc2VudCwgcmV0dXJucyBpdCwgb3RoZXJ3aXNlIGNyZWF0ZXMgYSBuZXcgdjgg
ZXh0ZXJuYWwKKyAgICAgICAgc3RyaW5nLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGlu
Zy5oOgorCiAyMDA5LTA3LTMwICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5jcHAJKHJldmlzaW9uIDQ2NTcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJp
bmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMCBAQAogI2luY2x1ZGUgIkNT
dHJpbmcuaCIKICNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIu
aCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCiAKICNp
bmNsdWRlIDx2OC5oPgogCkBAIC0xNDIsMTYgKzE0NSw3MiBAQCBBdG9taWNTdHJpbmcgdjhWYWx1
ZVRvQXRvbWljV2ViQ29yZVN0cmluCiAKIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiB2ODo6U3RyaW5nOjpFbXB0eSgpOwotICAgIHJldHVybiB2ODo6U3RyaW5nOjpO
ZXdFeHRlcm5hbChuZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHN0cmluZykpOworICAgIHJldHVy
biB2OEV4dGVybmFsU3RyaW5nKHN0cmluZyk7Cit9CisKK3N0YXRpYyBib29sIHN0cmluZ0ltcGxD
YWNoZUVuYWJsZWQgPSBmYWxzZTsKKwordm9pZCBlbmFibGVTdHJpbmdJbXBsQ2FjaGUoKQorewor
ICAgIHN0cmluZ0ltcGxDYWNoZUVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG1ha2VFeHRlcm5hbFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sK
KyAgICBXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHN0cmluZ1Jlc291cmNlID0gbmV3IFdlYkNvcmVT
dHJpbmdSZXNvdXJjZShzdHJpbmcpOworICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuZXdTdHJp
bmcgPSB2ODo6U3RyaW5nOjpOZXdFeHRlcm5hbChzdHJpbmdSZXNvdXJjZSk7CisgICAgaWYgKG5l
d1N0cmluZy5Jc0VtcHR5KCkpCisgICAgICAgIGRlbGV0ZSBzdHJpbmdSZXNvdXJjZTsKKworICAg
IHJldHVybiBuZXdTdHJpbmc7Cit9CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgdjg6
OlN0cmluZyo+IFN0cmluZ0NhY2hlOworCitzdGF0aWMgU3RyaW5nQ2FjaGUmIGdldFN0cmluZ0Nh
Y2hlKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmdDYWNoZSwgbWFpblRocmVhZFN0cmluZ0NhY2hlLCAoKSk7CisgICAg
cmV0dXJuIG1haW5UaHJlYWRTdHJpbmdDYWNoZTsKK30KKworc3RhdGljIHZvaWQgY2FjaGVkU3Ry
aW5nQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyLCB2b2lkKiBwYXJh
bWV0ZXIpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIFN0cmluZ0lt
cGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4ocGFyYW1ldGVyKTsKKyAg
ICBBU1NFUlQoZ2V0U3RyaW5nQ2FjaGUoKS5jb250YWlucyhzdHJpbmdJbXBsKSk7CisgICAgZ2V0
U3RyaW5nQ2FjaGUoKS5yZW1vdmUoc3RyaW5nSW1wbCk7CisgICAgd3JhcHBlci5EaXNwb3NlKCk7
CisgICAgc3RyaW5nSW1wbC0+ZGVyZWYoKTsKIH0KIAogdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4
RXh0ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKCFzdHJpbmcu
bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiB2ODo6U3RyaW5nOjpFbXB0eSgpOwotICAgIHJldHVy
biB2ODo6U3RyaW5nOjpOZXdFeHRlcm5hbChuZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHN0cmlu
ZykpOworCisgICAgaWYgKCFzdHJpbmdJbXBsQ2FjaGVFbmFibGVkKQorICAgICAgICByZXR1cm4g
bWFrZUV4dGVybmFsU3RyaW5nKHN0cmluZyk7CisKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBs
ID0gc3RyaW5nLmltcGwoKTsKKyAgICBTdHJpbmdDYWNoZSYgc3RyaW5nQ2FjaGUgPSBnZXRTdHJp
bmdDYWNoZSgpOworICAgIHY4OjpTdHJpbmcqIGNhY2hlZFY4U3RyaW5nID0gc3RyaW5nQ2FjaGUu
Z2V0KHN0cmluZ0ltcGwpOworICAgIGlmIChjYWNoZWRWOFN0cmluZykKKyAgICAgICAgcmV0dXJu
IHY4OjpMb2NhbDx2ODo6U3RyaW5nPihjYWNoZWRWOFN0cmluZyk7CisKKyAgICB2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmV3U3RyaW5nID0gbWFrZUV4dGVybmFsU3RyaW5nKHN0cmluZyk7CisgICAg
aWYgKG5ld1N0cmluZy5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CisKKyAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiB3cmFwcGVyID0gdjg6OlBlcnNpc3RlbnQ8djg6
OlN0cmluZz46Ok5ldyhuZXdTdHJpbmcpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG5ld1N0cmluZzsKKworICAgIHN0cmluZ0ltcGwtPnJlZigpOworICAgIHdy
YXBwZXIuTWFrZVdlYWsoc3RyaW5nSW1wbCwgY2FjaGVkU3RyaW5nQ2FsbGJhY2spOworICAgIHN0
cmluZ0NhY2hlLnNldChzdHJpbmdJbXBsLCAqd3JhcHBlcik7CisKKyAgICByZXR1cm4gbmV3U3Ry
aW5nOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmgJKHJldmlzaW9uIDQ2NTcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIC8vIHVuZGVybHlpbmcgYnVmZmVyIGFsaXZlIHdoaWxlIHRoZSBzdHJpbmcgaXMgc3RpbGwg
bGl2ZSBpbiB0aGUgVjggZW5naW5lLgogICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVy
bmFsU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCisgICAgLy8gRW5hYmxlcyBjYWNoaW5nIHY4IHdy
YXBwZXJzIGNyZWF0ZWQgZm9yIFdlYkNvcmU6OlN0cmluZ0ltcGwuICBDdXJyZW50bHkgdGhpcyBj
YWNoZSByZXF1aXJlcworICAgIC8vIGFsbCB0aGUgY2FsbHMgKGJvdGggdG8gY29udmVydCBXZWJD
b3JlOjpTdHJpbmcgdG8gdjg6OlN0cmluZyBhbmQgdG8gR0MgdGhlIGhhbmRsZSkKKyAgICAvLyB0
byBiZSBwZXJmb3JtZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIHZvaWQgZW5hYmxlU3RyaW5n
SW1wbENhY2hlKCk7CisKICAgICAvLyBDb252ZXJ0IGEgdmFsdWUgdG8gYSAzMi1iaXQgaW50ZWdl
ci4gIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZQogICAgIC8vIHZhbHVlIGNhbm5vdCBiZSBj
b252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBvciBjb252ZXJ0cyB0byBuYW4gb3IgdG8gYW4gaW5maW5p
dHkuCiAgICAgaW5saW5lIGludCB0b0ludDMyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwg
Ym9vbCYgb2spCg==
</data>
<flag name="review"
          id="17979"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>