<?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>72722</bug_id>
          
          <creation_ts>2011-11-18 06:21:06 -0800</creation_ts>
          <short_desc>Parse the viewport meta tag more robustly</short_desc>
          <delta_ts>2022-08-13 19:28:22 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc>http://dev.w3.org/csswg/css-device-adapt/#parsing-algorithm</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>45652</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Beverloo">peter</reporter>
          <assigned_to name="John Mellor">johnme</assigned_to>
          <cc>abarth</cc>
    
    <cc>aelias</cc>
    
    <cc>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eoconnor</cc>
    
    <cc>fsamuel</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>johnme</cc>
    
    <cc>kenneth</cc>
    
    <cc>kpiascik</cc>
    
    <cc>kpiascik</cc>
    
    <cc>rniwa</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>505729</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2011-11-18 06:21:06 -0800</bug_when>
    <thetext>Previous bugs on this subject:
https://bugs.webkit.org/show_bug.cgi?id=40204 (RESOLVED WONTFIX)
https://bugs.webkit.org/show_bug.cgi?id=47607 (RESOLVED INVALID)
https://bugs.webkit.org/show_bug.cgi?id=53705 (RESOLVED FIXED)

Following the popularity of the Android browser, several websites such as CNN, Flickr and Reddit have adapted the semi-colon as a separator in meta viewport. Because of this, Microsoft Internet Explorer and Mozilla Firefox also support the semi-colon as a separator, and the CSS Device Adaption specification has been updated to reflect this following discussion on www-style, albeit in a non-normative section.

This patch brings WebKit&apos;s behavior en par with Internet Explorer, Firefox and the specification.

http://dev.w3.org/csswg/css-device-adapt/#parsing-algorithm

Other sources:
http://blogs.msdn.com/b/iemobile/archive/2010/11/22/the-ie-mobile-viewport-on-windows-phone-7.aspx
http://hg.mozilla.org/mozilla-central/file/447556784745/content/base/src/nsContentUtils.cpp#l4506
http://lists.w3.org/Archives/Public/www-style/2011Oct/0689.html
http://lists.w3.org/Archives/Public/www-style/2011Oct/att-0689/viewport-tags.csv (download)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505731</commentid>
    <comment_count>1</comment_count>
      <attachid>115796</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2011-11-18 06:24:04 -0800</bug_when>
    <thetext>Created attachment 115796
Proposed patch

Proposed patch. Code is Kenneth&apos;s from bug 47607. I updated the description and added two tests. Kenneth, I can change the author if you&apos;d prefer that.

As expected results need to be updated, this will need at least another iteration. I&apos;m sure there will be a fair amount of discussion as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505780</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-11-18 07:43:00 -0800</bug_when>
    <thetext>I&apos;m fine with the change, but as I wrote part of the code someone else should probably review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505852</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-18 09:18:45 -0800</bug_when>
    <thetext>It appears that bug description and ChangeLog substantially misrepresent reasons for this change. 

I&apos;m concerned whether the situation was misrepresented to the CSS working group as well. Please provide a link to the www-style discussion.

&gt; CNN
&quot;initial-scale=1.0; maximum-scale=1.0; user-scalable=0;

&gt; Flickr
&quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;&quot;

&gt; Reddit
&quot;width=800, initial-scale=1&quot;

None of these sites uses semicolon as separator. CNN and Flickr use &quot;; &quot;, which always worked in iOS, and Reddit uses comma.

Assuming the discussion in previous bugs is accurate, only one old version of Android supported semicolon as separator.

I think that one possible reason to make this change would be &quot;paving the cowpaths&quot;. Semicolon with space works as a separator by accident, yet many authors expect it to work. An obvious downside is that most sites were never tested in any browser that treated lone semicolon as separator, so we can break sites for very little gain.

Matching IE or Firefox should not be a consideration in this decision in my opinion. It&apos;s other engines that were trying to match WebKit, apparently misunderstanding what it does. We need not create a cycle of reverse engineering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505853</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-18 09:19:38 -0800</bug_when>
    <thetext>&gt; Please provide a link to the www-style discussion.

I&apos;m sorry, I somehow didn&apos;t notice it among the other links. Reading now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505858</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-18 09:29:26 -0800</bug_when>
    <thetext>OK, so the data in the csv file linked from www-style discussion confirms that sites do not use semicolon as separator. There was very clear understanding on www-style of why semicolon with space works.

The discussion mentions the principle of &quot;Be liberal in what you accept, and conservative in what you send.&quot; In almost all cases, it&apos;s the wrong principle for web browser engines in this age. We should stick to interoperable specs, not surprise authors and security researchers with badly defined behaviors.

I think that we can still consider paving the cowpath. I suggest that the patch is reviewed by Dave Kilzer or Joe Pecoraro (CC&apos;ed on the  bug). One way or another, please correct the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505863</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-18 09:39:38 -0800</bug_when>
    <thetext>The reason why other engines felt the pressure to support semicolon as separator is likely that their number parser does not accept trailing garbage. If we decide to support semicolon explicitly, we should strongly consider using a number parsing mode that does not accept trailing garbage for interoperability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509162</commentid>
    <comment_count>7</comment_count>
      <attachid>116617</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2011-11-25 07:48:07 -0800</bug_when>
    <thetext>Created attachment 116617
Patch

&gt; &gt; CNN
&gt; &quot;initial-scale=1.0; maximum-scale=1.0; user-scalable=0;
&gt; 
&gt; &gt; Flickr
&gt; &quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;&quot;
&gt; 
&gt; &gt; Reddit
&gt; &quot;width=800, initial-scale=1&quot;
&gt; 
&gt; None of these sites uses semicolon as separator. CNN and Flickr use &quot;; &quot;, which always worked in iOS, and Reddit uses comma.

I do not completely with your assertion. While, on a technical level, they indeed do not use the semicolon as the separator, I&apos;m sure that the authors believe they do. Especially in the case of &quot;width=device-width;&quot; this is the case, because &quot;device-width;&quot; is invalid and thus the entire key-value pair gets disregarded. The intended behavior is only observed due to the other added properties.

&gt; The discussion mentions the principle of &quot;Be liberal in what you accept, and conservative in what you send.&quot; In almost all cases, it&apos;s the wrong principle for web browser engines in this age. We should stick to interoperable specs, not surprise authors and security researchers with badly defined behaviors.
&gt; 
&gt; I think that we can still consider paving the cowpath. I suggest that the patch is reviewed by Dave Kilzer or Joe Pecoraro (CC&apos;ed on the  bug). One way or another, please correct the ChangeLog.

Ok. I amended the description and labelled current usage as an &quot;assumed separator&quot;, while also adding more background. In the addendum of &quot;the behavior which authors expect&quot; I specifically refer to my earlier statement that authors think they are separators, and disfunctionality of the keywords is often compensated for by additional properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509222</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-25 11:13:59 -0800</bug_when>
    <thetext>Yes, authors might assume that viewport has CSS syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519173</commentid>
    <comment_count>9</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2011-12-12 07:10:46 -0800</bug_when>
    <thetext>Hello Dave, Joe,

Would one of you have a moment to review the patch?

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525678</commentid>
    <comment_count>10</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-21 15:04:29 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Hello Dave, Joe,
&gt; 
&gt; Would one of you have a moment to review the patch?

I&apos;m concerned about introducing regressions with this change.  Is there any web site that doesn&apos;t work because we&apos;re not parsing semi-colons?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525688</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-12-21 15:10:35 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Hello Dave, Joe,
&gt; &gt; 
&gt; &gt; Would one of you have a moment to review the patch?
&gt; 
&gt; I&apos;m concerned about introducing regressions with this change.
&gt; Is there any web site that doesn&apos;t work because we&apos;re not parsing semi-colons?

There could be a site that has &quot;width=device-width; ...&quot; that might change
because the device-width would actually start working. I don&apos;t know how
many sites actually have this problem though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605913</commentid>
    <comment_count>12</comment_count>
      <attachid>116617</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-04-19 14:31:02 -0700</bug_when>
    <thetext>Comment on attachment 116617
Patch

Removing r? for now until we can give clarify on the asked questions, which is in progress internally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640990</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-04 16:41:58 -0700</bug_when>
    <thetext>&gt; Removing r? for now until we can give clarify on the asked questions, which is in progress internally.

Peter any update on these questions?

IMHO, we should match whatever iOS does here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640991</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-04 16:43:05 -0700</bug_when>
    <thetext>By the way, the spec still seems to say that ; is a separator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665167</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-09 14:23:08 -0700</bug_when>
    <thetext>I&apos;m going to try to get to the bottom of this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665404</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-09 18:54:29 -0700</bug_when>
    <thetext>IMHO, we should fix Bug 45652 first so that we can actually test this code in a port-agnostic manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665777</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-10 08:43:51 -0700</bug_when>
    <thetext>Is the iOS code that parses the viewport open source?  It&apos;s lame to have to reverse engineer a WebKit implementation in the WebKit project.  :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665810</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-10 09:35:50 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Is the iOS code that parses the viewport open source?  It&apos;s lame to have to reverse engineer a WebKit implementation in the WebKit project.  :-/

Apparently the iOS parsing code is in http://opensource.apple.com/source/WebCore/WebCore-1298.39/dom/ViewportArguments.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665812</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-10 09:42:30 -0700</bug_when>
    <thetext>I&apos;ve verified that WebKit trunk currently matches the iOS parsing behavior.  I don&apos;t think we should change it at the moment for the reason expressed in Comment #10.  Like it or not, we probably need to emulate iOS quirks in the mobile world with the same amount of zeal that we emulate IE quirks in the desktop world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665813</commentid>
    <comment_count>20</comment_count>
      <attachid>151469</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-10 09:43:51 -0700</bug_when>
    <thetext>Created attachment 151469
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665851</commentid>
    <comment_count>21</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-07-10 10:15:38 -0700</bug_when>
    <thetext>This actually is an Android Browser quirk, which no longer applies in more recent versions of the browser (not entirely deliberately). Support for the semi-colon as a separator is supported by Mobile IE and Fennec (Firefox), but not by WebKit. In order to align with browser and developer behavior, the spec was updated by Florian last year, albeit in a non-normative section.

While I&apos;m still in favor of actually supporting the separator, we have no data (nor bandwidth to gather it) to determine whether there are significant regressions at this moment. Chrome on Android does ship with support for the semi-colon as a separator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665853</commentid>
    <comment_count>22</comment_count>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-07-10 10:16:23 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Like it or not, we probably need to emulate iOS quirks in the mobile world with the same amount of zeal that we emulate IE quirks in the desktop world.

I don&apos;t think rigidly following iOS is optimal here. We&apos;ve established that a high proportion of major sites use semi-colons in their viewport tag [1]. Most of these sites do happen to render correctly in Mobile Safari, because the developers have tested them and hackily added redundant information to the viewport until it worked. But there are still problems:

1. It&apos;s harder to achieve parity between WebKit ports, as some sites using semi-colons may only work in Mobile Safari due to iOS quirks such as [2]. Other ports can end up with a different rendering, even though if they had parsed the semi-colons they would have done what the author intended (hence match Mobile Safari).

2. This isn&apos;t an acceptable state for the web platform to remain in. By the principle of least astonishment, behavior should not be completely different depending on whether you separate terms with &quot;;&quot; or &quot;; &quot; [3], or add a trailing semi-colon [4], or add redundant properties. Unlike emulating IE quirks, the author&apos;s intent is very clear when they accidentally use semi-colons, and we should just parse them sensibly rather than letting them stumble around undefined/accidental behavior.

Meanwhile I&apos;ve yet to see any known downside of supporting semi-colons...

[1]: See the csv linked from the first post; I&apos;m happy to update this if it&apos;s felt useful.
[2]: http://adactio.com/journal/5088/
[3]: &quot;width=device-width; initial-scale=1&quot; works but &quot;width=device-width;initial-scale=1&quot; doesn&apos;t.
[4]: &quot;width=device-width&quot; works but &quot;width=device-width;&quot; doesn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665861</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-10 10:28:36 -0700</bug_when>
    <thetext>&gt; This actually is an Android Browser quirk, which no longer applies in more recent versions of the browser (not entirely deliberately).

Which behavior is an Android Browser quirk?  According to my reading of http://opensource.apple.com/source/WebCore/WebCore-1298.39/dom/ViewportArguments.cpp, trunk matches the iOS behavior.

&gt; Support for the semi-colon as a separator is supported by Mobile IE and Fennec (Firefox),

Those browsers don&apos;t have enough usage on the mobile web to matter for these sorts of compatibility issues.

&gt; but not by WebKit. In order to align with browser and developer behavior, the spec was updated by Florian last year, albeit in a non-normative section.

In general, specs should match implementations, especially when there&apos;s a popular implementation that&apos;s been shipping for years.

&gt; While I&apos;m still in favor of actually supporting the separator, we have no data (nor bandwidth to gather it) to determine whether there are significant regressions at this moment. Chrome on Android does ship with support for the semi-colon as a separator.

Until we have data to the contrary, we should match the most popular implementation, which, in this case, is iOS.  Introducing non-interoperability is not a path to better compatibility.

&gt; I don&apos;t think rigidly following iOS is optimal here. We&apos;ve established that a high proportion of major sites use semi-colons in their viewport tag [1].

That&apos;s even more reason to match what the most popular browser does with those inputs!

&gt; Most of these sites do happen to render correctly in Mobile Safari, because the developers have tested them and hackily added redundant information to the viewport until it worked.

Exactly.  That&apos;s how the web works.

&gt; 1. It&apos;s harder to achieve parity between WebKit ports, as some sites using semi-colons may only work in Mobile Safari due to iOS quirks such as [2]. Other ports can end up with a different rendering, even though if they had parsed the semi-colons they would have done what the author intended (hence match Mobile Safari).

The solution is to become ever more identical with iOS WebKit, not to introduce a bunch of non-interoperability in the hopes that it will all balance out.

&gt; 2. This isn&apos;t an acceptable state for the web platform to remain in. By the principle of least astonishment, behavior should not be completely different depending on whether you separate terms with &quot;;&quot; or &quot;; &quot; [3], or add a trailing semi-colon [4], or add redundant properties. Unlike emulating IE quirks, the author&apos;s intent is very clear when they accidentally use semi-colons, and we should just parse them sensibly rather than letting them stumble around undefined/accidental behavior.

That&apos;s not how the web works.  Authors copy and paste all manner of garbage syntax and the only way to make browsers render the content the same way is to have them work exactly the same.  In this case, that means processing the meta viewport exactly the way it is processed on iOS, starting with the parsing.

&gt; Meanwhile I&apos;ve yet to see any known downside of supporting semi-colons...

The downside is that doing should would make different ports of WebKit process the meta viewport in different ways.  That is a large downside.  This mess was created by the Android Browser diverging from the original iOS implementation.  The only path to sanity is to converge again.

This story has played itself out many, many times in the history of the web.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665871</commentid>
    <comment_count>24</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-07-10 10:39:33 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Which behavior is an Android Browser quirk?  According to my reading of http://opensource.apple.com/source/WebCore/WebCore-1298.39/dom/ViewportArguments.cpp, trunk matches the iOS behavior.

Recognizing semi-colons as a separator. Android Browser did this, ToT/iOS never did.

&gt; Those browsers don&apos;t have enough usage on the mobile web to matter for these sorts of compatibility issues.

That does not mean we can ignore them, interoperability between browsers is no different than interoperability between WebKit ports..

&gt; In general, specs should match implementations, especially when there&apos;s a popular implementation that&apos;s been shipping for years.

The specification matches what authors expect, and what is implemented by a majority of implementations when quantitatively speaking. Practically speaking, the share of iOS Safari and the recent Android Browser builds have a vast majority of usage, voiding my argument.

&gt; Until we have data to the contrary, we should match the most popular implementation, which, in this case, is iOS.  Introducing non-interoperability is not a path to better compatibility.

This is about interoperability between WebKit ports v.s. interoperability between different mobile rendering engines. I wish there was more insight behind the rationales why IE and Firefox decided to support this.

I do support not landing any new separator until there is data to back up its need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665879</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-10 10:53:19 -0700</bug_when>
    <thetext>&gt; &gt; Those browsers don&apos;t have enough usage on the mobile web to matter for these sorts of compatibility issues.
&gt; 
&gt; That does not mean we can ignore them, interoperability between browsers is no different than interoperability between WebKit ports..

Sure it does.  The goal here is to produce an implementation that correctly renders web pages.  Most folks with mobile web sites do not test their site in Fennec, which means that matching Fennec won&apos;t cause us to render the site correctly.  By contrast, most folks do test their mobile site in iOS, which means that if we match what Mobile Safari does, those sites will render correctly.

&gt; &gt; In general, specs should match implementations, especially when there&apos;s a popular implementation that&apos;s been shipping for years.
&gt; 
&gt; The specification matches what authors expect, and what is implemented by a majority of implementations when quantitatively speaking. Practically speaking, the share of iOS Safari and the recent Android Browser builds have a vast majority of usage, voiding my argument.

It&apos;s usage that matters because that&apos;s what causes site authors to test their web sites in a given implementation.

&gt; &gt; Until we have data to the contrary, we should match the most popular implementation, which, in this case, is iOS.  Introducing non-interoperability is not a path to better compatibility.
&gt; 
&gt; This is about interoperability between WebKit ports v.s. interoperability between different mobile rendering engines. I wish there was more insight behind the rationales why IE and Firefox decided to support this.

Interoperability with IE and Firefox on mobile currently doesn&apos;t matter.  They&apos;ll run into compat problems and end up matching iOS too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665886</commentid>
    <comment_count>26</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-07-10 11:06:08 -0700</bug_when>
    <thetext>The specification is moving towards deprecating (though not dropping support for) the viewport meta tag in favor of CSS&apos; @viewport at-rule, which should take care of these differences in a more persistent way. For Android, part of the problem will be sites which send different viewports based on the user agent, assuming support for semi-colons as separators.

While matching the expected behavior of authors would be ideal, which is, as earlier stated, what other browsers do, you&apos;re right in that usage share outweighs this argument. Without additional data, I&apos;m wary that the ship has already sailed and we should drop this as you proposed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665987</commentid>
    <comment_count>27</comment_count>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-07-10 13:19:34 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Until we have data to the contrary, we should match the most popular implementation, which, in this case, is iOS.

Technically the most used implementation seems to be Opera; and of the WebKit ports it has been Android Browser since May 2011 (http://gs.statcounter.com/#mobile_browser-ww-monthly-201101-201206).

&gt; &gt; 1. It&apos;s harder to achieve parity between WebKit ports, as some sites using semi-colons may only work in Mobile Safari due to iOS quirks such as [2]. Other ports can end up with a different rendering, even though if they had parsed the semi-colons they would have done what the author intended (hence match Mobile Safari).
&gt; 
&gt; The solution is to become ever more identical with iOS WebKit, not to introduce a bunch of non-interoperability in the hopes that it will all balance out.

It&apos;s not desirable to reproduce all iOS bugs. For example, we shouldn&apos;t copy iOS&apos;s bug that if you rotate a &quot;width=device-width, initial-scale=1.0&quot; page from portrait to landscape you end up at an arbitrary zoom level and have to fix it by manually double-tapping (http://adactio.com/journal/5088/); instead iOS should just fix that.

&gt; &gt; 2. This isn&apos;t an acceptable state for the web platform to remain in. By the principle of least astonishment, behavior should not be completely different depending on whether you separate terms with &quot;;&quot; or &quot;; &quot; [3], or add a trailing semi-colon [4], or add redundant properties. Unlike emulating IE quirks, the author&apos;s intent is very clear when they accidentally use semi-colons, and we should just parse them sensibly rather than letting them stumble around undefined/accidental behavior.
&gt; 
&gt; That&apos;s not how the web works.  Authors copy and paste all manner of garbage syntax and the only way to make browsers render the content the same way is to have them work exactly the same.  In this case, that means processing the meta viewport exactly the way it is processed on iOS, starting with the parsing.
&gt; (...)
&gt; This story has played itself out many, many times in the history of the web.

The web tends to evolve by &quot;paving the cowpaths&quot;. This is a cowpath: well-trodden, despite being unspec&apos;d. We need to pave it with something sensible that matches existing websites. While requiring all browsers to reverse-engineer every last iOS bug is one way of standardising this, it&apos;s far from ideal. My experience to date is that 99% of websites using semi-colons behave the same whether or not you parse the semi-colons (and of the remainder, some render worse but others render better); if we can get data that confirms that, then it would be fairly safe to pave this cowpath in a way that won&apos;t constantly trip up web developers: supporting semi-colons.

(In reply to comment #25)
&gt; Interoperability with IE and Firefox on mobile currently doesn&apos;t matter.  They&apos;ll run into compat problems and end up matching iOS too.

I had a skim through bugzilla.mozilla.org and couldn&apos;t find any viewport bugs caused by supporting semi-colons...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666343</commentid>
    <comment_count>28</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-07-10 22:06:33 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; Is the iOS code that parses the viewport open source?  It&apos;s lame to have to reverse engineer a WebKit implementation in the WebKit project.  :-/
&gt; 
&gt; Apparently the iOS parsing code is in http://opensource.apple.com/source/WebCore/WebCore-1298.39/dom/ViewportArguments.cpp

That is not really what parses the &apos;content&apos; argument of the meta tag. The whole discussion started as some browsers supported ; as a separator in &apos;content&apos; which does not match the specification of meta tags (HTML spec?). I am pretty OK with us not supporting ; as a separator, IE etc will just have to change their implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667817</commentid>
    <comment_count>29</comment_count>
      <attachid>151469</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-12 08:38:31 -0700</bug_when>
    <thetext>Comment on attachment 151469
Patch

John, I&apos;m happy to continue discussing this topic with you.  It&apos;s important that we come to agreement so that we can synchronous the upstream behavior here with the code on the chromium-android branch.

In the meantime, I&apos;m inclined to land this patch given that it just introduces tests for this behavior.  If we later decide to use ; as a separator, we can always update the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667830</commentid>
    <comment_count>30</comment_count>
      <attachid>151469</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 08:52:48 -0700</bug_when>
    <thetext>Comment on attachment 151469
Patch

Clearing flags on attachment: 151469

Committed r122464: &lt;http://trac.webkit.org/changeset/122464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667831</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 08:52:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667839</commentid>
    <comment_count>32</comment_count>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-07-12 09:01:04 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 151469 [details])
&gt; John, I&apos;m happy to continue discussing this topic with you.  It&apos;s important that we come to agreement so that we can synchronous the upstream behavior here with the code on the chromium-android branch.
&gt; 
&gt; In the meantime, I&apos;m inclined to land this patch given that it just introduces tests for this behavior.  If we later decide to use ; as a separator, we can always update the tests.

Sure, the patch LGTM. It seems clear that upstream won&apos;t change without data; perhaps we should put this bug on hold until data can be produced (and if that doesn&apos;t happen in time I guess we can revert this on the chromium-android branch)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667859</commentid>
    <comment_count>33</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-12 09:27:58 -0700</bug_when>
    <thetext>I&apos;m happy to keep this bug open while we gather data, but I would like to synchronize this behavior between upstream and the chromium-android branch.

Maybe the thing to do is to make the chromium-android branch match upstream and then be on the lookout for compatibility issues.  If we find compat issues, that will be useful data that we can use to resolve this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672495</commentid>
    <comment_count>34</comment_count>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-07-18 10:29:53 -0700</bug_when>
    <thetext>Assigning this to myself to I remember to gather data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744517</commentid>
    <comment_count>35</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 12:54:40 -0700</bug_when>
    <thetext>No longer blocks bug 66687.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1890901</commentid>
    <comment_count>36</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-08-12 09:26:00 -0700</bug_when>
    <thetext>rniwa@webkit.org - There are only just test cases in the patch, do we need them or WPT is enough for these cases? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1891189</commentid>
    <comment_count>37</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-08-13 19:28:22 -0700</bug_when>
    <thetext>At this point, this is Later.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115796</attachid>
            <date>2011-11-18 06:24:04 -0800</date>
            <delta_ts>2011-11-25 07:48:07 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>viewport-patch.patch</filename>
            <type>text/plain</type>
            <size>6787</size>
            <attacher name="Peter Beverloo">peter</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMWQwZDIzLi41MDcxMmNiIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTEt
MTggIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlY29n
bml6ZSB0aGUgc2VtaS1jb2xvbiBhcyBhIHNlcGFyYXRvciBmb3IgbWV0YSB2aWV3cG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MjIKKworICAg
ICAgICBGb2xsb3dpbmcgdGhlIHBvcHVsYXJpdHkgb2YgdGhlIEFuZHJvaWQgYnJvd3Nlciwgc2V2
ZXJhbCB3ZWJzaXRlcyBzdWNoCisgICAgICAgIGFzIENOTiwgRmxpY2tyIGFuZCBSZWRkaXQgaGF2
ZSBhZGFwdGVkIHRoZSBzZW1pLWNvbG9uIGFzIGEgc2VwYXJhdG9yIGluCisgICAgICAgIG1ldGEg
dmlld3BvcnQuIEJlY2F1c2Ugb2YgdGhpcywgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIGFu
ZCBNb3ppbGxhCisgICAgICAgIEZpcmVmb3ggYWxzbyBzdXBwb3J0IHRoZSBzZW1pLWNvbG9uIGFz
IGEgc2VwYXJhdG9yLCBhbmQgdGhlIENTUyBEZXZpY2UKKyAgICAgICAgQWRhcHRpb24gc3BlY2lm
aWNhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcyBmb2xsb3dpbmcKKyAgICAg
ICAgZGlzY3Vzc2lvbiBvbiB3d3ctc3R5bGUsIGFsYmVpdCBpbiBhIG5vbi1ub3JtYXRpdmUgc2Vj
dGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGJyaW5ncyBXZWJLaXQncyBiZWhhdmlvciBlbiBw
YXIgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwKKyAgICAgICAgRmlyZWZveCBhbmQgdGhlIHNwZWNp
ZmljYXRpb24uCisKKyAgICAgICAgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLWRldmljZS1h
ZGFwdC8jcGFyc2luZy1hbGdvcml0aG0KKworICAgICAgICBBZGQgdHdvIG5ldyB0ZXN0cywgdGVz
dGluZyB3aGV0aGVyIHRoZSBzZXBhcmF0b3Igd29ya3MgZm9yIGJvdGggbnVtYmVycworICAgICAg
ICBhcyBmb3Iga2V5d29yZHMuIEkgZXhwZWN0IHRoYXQgb3RoZXIgdGVzdCByZXN1bHRzIG5lZWQg
dG8gYmUgbW9kaWZpZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzMy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTMzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTM0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzQuaHRtbDogQWRkZWQuCisKIDIwMTEt
MTEtMTggIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJl
YmFzZWxpbmUgYWNpZDMuaHRtbCBmb3IgQ2hyb21pdW0gTWFjIDEwLjUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTMzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTMzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU0OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzMtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMiBAQAordmlld3BvcnQgc2l6ZSA5ODB4MTA3OCBzY2FsZSAxMC4wMDAwMDAgd2l0aCBsaW1p
dHMgWzEwLjAwMDAwMCwgMTAuMDAwMDAwXSBhbmQgdXNlclNjYWxhYmxlIC0xLjAwMDAwMAorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzMy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGViOTFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzMuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
aGVhZD4KKyAgICA8dGl0bGU+Vmlld3BvcnQgTUVUQSB3aXRoIHNlbWktY29sb25zICJtaW5pbXVt
LXNjYWxlPTEwOyBtYXhpbXVtLXNjYWxlPTAuMSIuPC90aXRsZT4KKyAgICA8bWV0YSBuYW1lPSJ2
aWV3cG9ydCIgY29udGVudD0ibWluaW11bS1zY2FsZT0xMDsgbWF4aW11bS1zY2FsZT0wLjEiPgor
ICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoMTYwLCAzMjAsIDQ4MCwgMzIwLCAz
NTIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InRlc3QoKTsiPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC92aWV3
cG9ydC92aWV3cG9ydC0xMzQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9y
dC92aWV3cG9ydC0xMzQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmYyZTQ2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdw
b3J0L3ZpZXdwb3J0LTEzNC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyIEBACit2aWV3cG9ydCBz
aXplIDMyMHgzNTIgc2NhbGUgMi4wMDAwMDAgd2l0aCBsaW1pdHMgWzEuMDAwMDAwLCA1LjAwMDAw
MF0gYW5kIHVzZXJTY2FsYWJsZSAtMS4wMDAwMDAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvdmlld3Bv
cnQvdmlld3BvcnQtMTM0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTFkMTA0NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmll
d3BvcnQtMTM0Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGhlYWQ+CisgICAgPHRpdGxlPlZpZXdw
b3J0IE1FVEEgd2l0aCBzZW1pLWNvbG9ucyAid2lkdGg9ZGV2aWNlLXdpZHRoOyBpbml0aWFsLXNj
YWxlPTIiLjwvdGl0bGU+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRo
PWRldmljZS13aWR0aDsgaW5pdGlhbC1zY2FsZT0yIj4KKyAgICA8c2NyaXB0PgorICAgICAgICBm
dW5jdGlvbiB0ZXN0KCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ29uZmlndXJhdGlv
bkZvclZpZXdwb3J0KDE2MCwgMzIwLCA0ODAsIDMyMCwgMzUyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCk7Ij4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNTNkMTdmLi41NDlmODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTEtMTEtMTggIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJlY29nbml6ZSB0aGUgc2VtaS1jb2xvbiBhcyBhIHNlcGFyYXRvciBmb3IgbWV0YSB2
aWV3cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzI3MjIKKworICAgICAgICBDb2RlLWNoYW5nZXMgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5z
ZW4gPGtlbm5ldGhAd2Via2l0Lm9yZz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ3NjA3CisKKyAgICAgICAgRm9sbG93aW5nIHRoZSBwb3B1bGFyaXR5
IG9mIHRoZSBBbmRyb2lkIGJyb3dzZXIsIHNldmVyYWwgd2Vic2l0ZXMgc3VjaAorICAgICAgICBh
cyBDTk4sIEZsaWNrciBhbmQgUmVkZGl0IGhhdmUgYWRhcHRlZCB0aGUgc2VtaS1jb2xvbiBhcyBh
IHNlcGFyYXRvciBpbgorICAgICAgICBtZXRhIHZpZXdwb3J0LiBCZWNhdXNlIG9mIHRoaXMsIE1p
Y3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciBhbmQgTW96aWxsYQorICAgICAgICBGaXJlZm94IGFs
c28gc3VwcG9ydCB0aGUgc2VtaS1jb2xvbiBhcyBhIHNlcGFyYXRvciwgYW5kIHRoZSBDU1MgRGV2
aWNlCisgICAgICAgIEFkYXB0aW9uIHNwZWNpZmljYXRpb24gaGFzIGJlZW4gdXBkYXRlZCB0byBy
ZWZsZWN0IHRoaXMgZm9sbG93aW5nCisgICAgICAgIGRpc2N1c3Npb24gb24gd3d3LXN0eWxlLCBh
bGJlaXQgaW4gYSBub24tbm9ybWF0aXZlIHNlY3Rpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBi
cmluZ3MgV2ViS2l0J3MgYmVoYXZpb3IgZW4gcGFyIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIsCisg
ICAgICAgIEZpcmVmb3ggYW5kIHRoZSBzcGVjaWZpY2F0aW9uLgorCisgICAgICAgIGh0dHA6Ly9k
ZXYudzMub3JnL2Nzc3dnL2Nzcy1kZXZpY2UtYWRhcHQvI3BhcnNpbmctYWxnb3JpdGhtCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qv
dmlld3BvcnQvdmlld3BvcnQtMTMzLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvdmlld3BvcnQv
dmlld3BvcnQtMTM0Lmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppc1NlcGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJv
Y2Vzc0FyZ3VtZW50cyk6CisKIDIwMTEtMTEtMTggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZW1vdmUgdW5uZWVkZWQgaW5jbHVkZSAoYW5kIGlmZGVmKSBmcm9t
IFY4RE9NV2luZG93Q3VzdG9tLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggN2MxMTgw
Mi4uZTk3MzVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yNjc0LDcgKzI2NzQsNyBA
QCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzSHR0cEVxdWl2KGNvbnN0IFN0cmluZyYgZXF1aXYsIGNv
bnN0IFN0cmluZyYgY29udGVudCkKIC8vIFRob3VnaCBpc3NwYWNlKCkgY29uc2lkZXJzIFx0IGFu
ZCBcdiB0byBiZSB3aGl0ZXNwYWNlLCBXaW4gSUUgZG9lc24ndC4KIHN0YXRpYyBib29sIGlzU2Vw
YXJhdG9yKFVDaGFyIGMpCiB7Ci0gICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBj
ID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJz0nIHx8IGMgPT0gJywnIHx8IGMgPT0gJ1ww
JzsKKyAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09
ICdccicgfHwgYyA9PSAnPScgfHwgYyA9PSAnLCcgfHwgYyA9PSAnOycgfHwgYyA9PSAnXDAnOwog
fQogCiB2b2lkIERvY3VtZW50Ojpwcm9jZXNzQXJndW1lbnRzKGNvbnN0IFN0cmluZyYgZmVhdHVy
ZXMsIHZvaWQqIGRhdGEsIEFyZ3VtZW50c0NhbGxiYWNrIGNhbGxiYWNrKQpAQCAtMjcwMCwxNiAr
MjcwMCwxNiBAQCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzQXJndW1lbnRzKGNvbnN0IFN0cmluZyYg
ZmVhdHVyZXMsIHZvaWQqIGRhdGEsIEFyZ3VtZW50c0NhbAogICAgICAgICAgICAgaSsrOwogICAg
ICAgICBrZXlFbmQgPSBpOwogCi0gICAgICAgIC8vIHNraXAgdG8gZmlyc3QgJz0nLCBidXQgZG9u
J3Qgc2tpcCBwYXN0IGEgJywnIG9yIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgICAgICAvLyBz
a2lwIHRvIGZpcnN0ICc9JywgYnV0IGRvbid0IHNraXAgcGFzdCBhICcsJywgJzsnIG9yIHRoZSBl
bmQgb2YgdGhlIHN0cmluZwogICAgICAgICB3aGlsZSAoYnVmZmVyW2ldICE9ICc9JykgewotICAg
ICAgICAgICAgaWYgKGJ1ZmZlcltpXSA9PSAnLCcgfHwgaSA+PSBsZW5ndGgpCisgICAgICAgICAg
ICBpZiAoYnVmZmVyW2ldID09ICcsJyB8fCBidWZmZXJbaV0gPT0gJzsnIHx8IGkgPj0gbGVuZ3Ro
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gc2tpcCB0byBmaXJzdCBub24tc2VwYXJhdG9yLCBidXQgZG9uJ3Qgc2tpcCBw
YXN0IGEgJywnIG9yIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgICAgICAvLyBza2lwIHRvIGZp
cnN0IG5vbi1zZXBhcmF0b3IsIGJ1dCBkb24ndCBza2lwIHBhc3QgYSAnLCcsJzsnIG9yIHRoZSBl
bmQgb2YgdGhlIHN0cmluZwogICAgICAgICB3aGlsZSAoaXNTZXBhcmF0b3IoYnVmZmVyW2ldKSkg
ewotICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSA9PSAnLCcgfHwgaSA+PSBsZW5ndGgpCisgICAg
ICAgICAgICBpZiAoYnVmZmVyW2ldID09ICcsJyB8fCBidWZmZXJbaV0gPT0gJzsnIHx8IGkgPj0g
bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaSsrOwogICAgICAg
ICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116617</attachid>
            <date>2011-11-25 07:48:07 -0800</date>
            <delta_ts>2012-07-10 09:43:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>viewport-2.patch</filename>
            <type>text/plain</type>
            <size>7794</size>
            <attacher name="Peter Beverloo">peter</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4MGY0Zjg0Li5iZjQ1ODQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTEt
MjUgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlY29n
bml6ZSB0aGUgc2VtaS1jb2xvbiBhcyBhIHNlcGFyYXRvciBmb3IgbWV0YSB2aWV3cG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MjIKKworICAg
ICAgICBGb2xsb3dpbmcgdGhlIHBvcHVsYXJpdHkgb2YgdGhlIEFuZHJvaWQgYnJvd3Nlciwgc2V2
ZXJhbCB3ZWJzaXRlcyBzdWNoCisgICAgICAgIGFzIENOTiwgRmxpY2tyIGFuZCBSZWRkaXQgc3Rh
cnRlZCB1c2luZyB0aGUgc2VtaS1jb2xvbiBhcyBhbiBhc3N1bWVkCisgICAgICAgIHNlcGFyYXRv
ciBmb3IgbWV0YSB2aWV3cG9ydCwgdXN1YWxseSBmb2xsb3dlZCBieSBzcGFjZXMgY2F1c2luZyB0
aGVtIHRvCisgICAgICAgIHdvcmsgZHVlIHRvIGVuZ2luZXMgZGlzcmVnYXJkaW5nIHRyYWlsaW5n
IGdhcmJhZ2UgYWZ0ZXIgbnVtZXJpYyB2YWx1ZXMuCisgICAgICAgIE1pY3Jvc29mdCBJbnRlcm5l
dCBFeHBsb3JlciBhbmQgTW96aWxsYSBGaXJlZm94IGRvIG5vdyBzdXBwb3J0IHRoZSBzZW1pLQor
ICAgICAgICBjb2xvbiBhcyBhIHNlcGFyYXRvciwgYW5kIHRoZSBDU1MgRGV2aWNlIEFkYXB0aW9u
IHNwZWNpZmljYXRpb24gaGFzIGJlZW4KKyAgICAgICAgdXBkYXRlZCB0byByZWZsZWN0IHRoaXMg
Zm9sbG93aW5nIGRpc2N1c3Npb24gb24gd3d3LXN0eWxlLCBhbGJlaXQgaW4gYQorICAgICAgICBu
b24tbm9ybWF0aXZlIHNlY3Rpb24uCisKKyAgICAgICAgV2hpbGUgbWFueSBvZiB0aGUgY3VycmVu
dCB1c2VzIG9mIHNlbWktY29sb25zIGluIG1ldGEgdmlld3BvcnQgd29yayBkdWUKKyAgICAgICAg
dG8gdGhlIGFkZGl0aW9uIG9mIHdoaXRlc3BhY2UgYWZ0ZXJ3YXJkcywgaXQgd2lsbCBjYXVzZSB1
bmV4cGVjdGVkCisgICAgICAgIGJlaGF2aW9yIGZvciBhdXRob3JzIHdoZW4gdGhlIHdoaXRlc3Bh
Y2UgaXMgcmVtb3ZlZCBvciB3aGVuIHJlcGxhY2luZworICAgICAgICB0aGUgbnVtYmVyIHdpdGgg
YSBrZXl3b3JkLCB3aGljaCB3aWxsIG5vdCBoYXZlIGl0cyB0cmFpbGluZyBnYXJiYWdlCisgICAg
ICAgIHJlbW92ZWQuIFRoaXMgcGF0Y2ggYnJpbmdzIFdlYktpdCdzIGJlaGF2aW9yIGVuIHBhciB3
aXRoIEludGVybmV0CisgICAgICAgIEV4cGxvcmVyLCBGaXJlZm94LCB0aGUgc3BlYyBhbmQgdGhl
IGJlaGF2aW9yIHdoaWNoIGF1dGhvcnMgZXhwZWN0LgorCisgICAgICAgIGh0dHA6Ly9kZXYudzMu
b3JnL2Nzc3dnL2Nzcy1kZXZpY2UtYWRhcHQvI3BhcnNpbmctYWxnb3JpdGhtCisKKyAgICAgICAg
QWRkIHR3byBuZXcgdGVzdHMsIHRlc3Rpbmcgd2hldGhlciB0aGUgc2VwYXJhdG9yIHdvcmtzIGZv
ciBib3RoIG51bWJlcnMKKyAgICAgICAgYXMgZm9yIGtleXdvcmRzLiBJIGV4cGVjdCB0aGF0IG90
aGVyIHRlc3QgcmVzdWx0cyBuZWVkIHRvIGJlIG1vZGlmaWVkLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC92aWV3cG9ydC92aWV3cG9ydC0x
MzMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0
LTEzMy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzNC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTM0
Lmh0bWw6IEFkZGVkLgorCiAyMDExLTExLTI1ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIE1hcmsgaW5zcGVjdG9yL2VsZW1lbnRz
L3JlbW92ZS1ub2RlLmh0bWwgdGVzdCBhcyBjcmFzaGluZyBzb21ldGltZXMgb24gTGludXguCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzMy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzMy1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1NDlmOQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTMzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDIgQEAKK3ZpZXdwb3J0IHNpemUgOTgweDEwNzggc2NhbGUgMTAuMDAw
MDAwIHdpdGggbGltaXRzIFsxMC4wMDAwMDAsIDEwLjAwMDAwMF0gYW5kIHVzZXJTY2FsYWJsZSAt
MS4wMDAwMDAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC92aWV3cG9y
dC0xMzMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTMzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlYjkxZgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTMzLmh0bWwKQEAgLTAs
MCArMSwxMyBAQAorPGhlYWQ+CisgICAgPHRpdGxlPlZpZXdwb3J0IE1FVEEgd2l0aCBzZW1pLWNv
bG9ucyAibWluaW11bS1zY2FsZT0xMDsgbWF4aW11bS1zY2FsZT0wLjEiLjwvdGl0bGU+CisgICAg
PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9Im1pbmltdW0tc2NhbGU9MTA7IG1heGltdW0t
c2NhbGU9MC4xIj4KKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeworICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KDE2MCwgMzIw
LCA0ODAsIDMyMCwgMzUyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCk7Ij4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTM0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTM0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mMmU0NjVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBA
QAordmlld3BvcnQgc2l6ZSAzMjB4MzUyIHNjYWxlIDIuMDAwMDAwIHdpdGggbGltaXRzIFsxLjAw
MDAwMCwgNS4wMDAwMDBdIGFuZCB1c2VyU2NhbGFibGUgLTEuMDAwMDAwCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTM0Lmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzNC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmUxZDEwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzNC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxoZWFkPgorICAg
IDx0aXRsZT5WaWV3cG9ydCBNRVRBIHdpdGggc2VtaS1jb2xvbnMgIndpZHRoPWRldmljZS13aWR0
aDsgaW5pdGlhbC1zY2FsZT0yIi48L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBj
b250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGg7IGluaXRpYWwtc2NhbGU9MiI+CisgICAgPHNjcmlw
dD4KKyAgICAgICAgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCgxNjAsIDMyMCwgNDgwLCAzMjAsIDM1Mik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0idGVzdCgpOyI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RkNzQwOC4uMzFhOTU4OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM4IEBACisyMDExLTExLTI1ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZWNvZ25pemUgdGhlIHNlbWktY29sb24gYXMgYSBzZXBhcmF0
b3IgZm9yIG1ldGEgdmlld3BvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcyNzIyCisKKyAgICAgICAgQ29kZS1jaGFuZ2VzIGJ5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuIDxrZW5uZXRoQHdlYmtpdC5vcmc+CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzYwNworCisgICAgICAgIEZvbGxvd2luZyB0
aGUgcG9wdWxhcml0eSBvZiB0aGUgQW5kcm9pZCBicm93c2VyLCBzZXZlcmFsIHdlYnNpdGVzIHN1
Y2gKKyAgICAgICAgYXMgQ05OLCBGbGlja3IgYW5kIFJlZGRpdCBzdGFydGVkIHVzaW5nIHRoZSBz
ZW1pLWNvbG9uIGFzIGFuIGFzc3VtZWQKKyAgICAgICAgc2VwYXJhdG9yIGZvciBtZXRhIHZpZXdw
b3J0LCB1c3VhbGx5IGZvbGxvd2VkIGJ5IHNwYWNlcyBjYXVzaW5nIHRoZW0gdG8KKyAgICAgICAg
d29yayBkdWUgdG8gZW5naW5lcyBkaXNyZWdhcmRpbmcgdHJhaWxpbmcgZ2FyYmFnZSBhZnRlciBu
dW1lcmljIHZhbHVlcy4KKyAgICAgICAgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIGFuZCBN
b3ppbGxhIEZpcmVmb3ggZG8gbm93IHN1cHBvcnQgdGhlIHNlbWktCisgICAgICAgIGNvbG9uIGFz
IGEgc2VwYXJhdG9yLCBhbmQgdGhlIENTUyBEZXZpY2UgQWRhcHRpb24gc3BlY2lmaWNhdGlvbiBo
YXMgYmVlbgorICAgICAgICB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcyBmb2xsb3dpbmcgZGlzY3Vz
c2lvbiBvbiB3d3ctc3R5bGUsIGFsYmVpdCBpbiBhCisgICAgICAgIG5vbi1ub3JtYXRpdmUgc2Vj
dGlvbi4gCisKKyAgICAgICAgV2hpbGUgbWFueSBvZiB0aGUgY3VycmVudCB1c2VzIG9mIHNlbWkt
Y29sb25zIGluIG1ldGEgdmlld3BvcnQgd29yayBkdWUKKyAgICAgICAgdG8gdGhlIGFkZGl0aW9u
IG9mIHdoaXRlc3BhY2UgYWZ0ZXJ3YXJkcywgaXQgd2lsbCBjYXVzZSB1bmV4cGVjdGVkIAorICAg
ICAgICBiZWhhdmlvciBmb3IgYXV0aG9ycyB3aGVuIHRoZSB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQg
b3Igd2hlbiByZXBsYWNpbmcgICAgCisgICAgICAgIHRoZSBudW1iZXIgd2l0aCBhIGtleXdvcmQs
IHdoaWNoIHdpbGwgbm90IGhhdmUgaXRzIHRyYWlsaW5nIGdhcmJhZ2UKKyAgICAgICAgcmVtb3Zl
ZC4gVGhpcyBwYXRjaCBicmluZ3MgV2ViS2l0J3MgYmVoYXZpb3IgZW4gcGFyIHdpdGggSW50ZXJu
ZXQKKyAgICAgICAgRXhwbG9yZXIsIEZpcmVmb3gsIHRoZSBzcGVjIGFuZCB0aGUgYmVoYXZpb3Ig
d2hpY2ggYXV0aG9ycyBleHBlY3QuCisKKyAgICAgICAgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cv
Y3NzLWRldmljZS1hZGFwdC8jcGFyc2luZy1hbGdvcml0aG0KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC92aWV3cG9ydC92aWV3cG9y
dC0xMzMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzQuaHRt
bAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Vw
YXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNzQXJndW1lbnRzKToK
KwogMjAxMS0xMS0yNSAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgRmFjdG9yIGVsZW1lbnQgcG9pbnRlciBvdXQgb2YgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5NzUxOWExLi4wOWY1YTUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI2NzUsNyArMjY3NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnBy
b2Nlc3NIdHRwRXF1aXYoY29uc3QgU3RyaW5nJiBlcXVpdiwgY29uc3QgU3RyaW5nJiBjb250ZW50
KQogLy8gVGhvdWdoIGlzc3BhY2UoKSBjb25zaWRlcnMgXHQgYW5kIFx2IHRvIGJlIHdoaXRlc3Bh
Y2UsIFdpbiBJRSBkb2Vzbid0Lgogc3RhdGljIGJvb2wgaXNTZXBhcmF0b3IoVUNoYXIgYykKIHsK
LSAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdc
cicgfHwgYyA9PSAnPScgfHwgYyA9PSAnLCcgfHwgYyA9PSAnXDAnOworICAgIHJldHVybiBjID09
ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICc9JyB8
fCBjID09ICcsJyB8fCBjID09ICc7JyB8fCBjID09ICdcMCc7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6
OnByb2Nlc3NBcmd1bWVudHMoY29uc3QgU3RyaW5nJiBmZWF0dXJlcywgdm9pZCogZGF0YSwgQXJn
dW1lbnRzQ2FsbGJhY2sgY2FsbGJhY2spCkBAIC0yNzAxLDE2ICsyNzAxLDE2IEBAIHZvaWQgRG9j
dW1lbnQ6OnByb2Nlc3NBcmd1bWVudHMoY29uc3QgU3RyaW5nJiBmZWF0dXJlcywgdm9pZCogZGF0
YSwgQXJndW1lbnRzQ2FsCiAgICAgICAgICAgICBpKys7CiAgICAgICAgIGtleUVuZCA9IGk7CiAK
LSAgICAgICAgLy8gc2tpcCB0byBmaXJzdCAnPScsIGJ1dCBkb24ndCBza2lwIHBhc3QgYSAnLCcg
b3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisgICAgICAgIC8vIHNraXAgdG8gZmlyc3QgJz0nLCBi
dXQgZG9uJ3Qgc2tpcCBwYXN0IGEgJywnLCAnOycgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCiAg
ICAgICAgIHdoaWxlIChidWZmZXJbaV0gIT0gJz0nKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVy
W2ldID09ICcsJyB8fCBpID49IGxlbmd0aCkKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0gPT0g
JywnIHx8IGJ1ZmZlcltpXSA9PSAnOycgfHwgaSA+PSBsZW5ndGgpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBza2lwIHRv
IGZpcnN0IG5vbi1zZXBhcmF0b3IsIGJ1dCBkb24ndCBza2lwIHBhc3QgYSAnLCcgb3IgdGhlIGVu
ZCBvZiB0aGUgc3RyaW5nCisgICAgICAgIC8vIHNraXAgdG8gZmlyc3Qgbm9uLXNlcGFyYXRvciwg
YnV0IGRvbid0IHNraXAgcGFzdCBhICcsJywnOycgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCiAg
ICAgICAgIHdoaWxlIChpc1NlcGFyYXRvcihidWZmZXJbaV0pKSB7Ci0gICAgICAgICAgICBpZiAo
YnVmZmVyW2ldID09ICcsJyB8fCBpID49IGxlbmd0aCkKKyAgICAgICAgICAgIGlmIChidWZmZXJb
aV0gPT0gJywnIHx8IGJ1ZmZlcltpXSA9PSAnOycgfHwgaSA+PSBsZW5ndGgpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151469</attachid>
            <date>2012-07-10 09:43:51 -0700</date>
            <delta_ts>2012-07-12 08:52:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72722-20120710094350.patch</filename>
            <type>text/plain</type>
            <size>3569</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjA0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTI2NmZiMTdkYTNjY2JmM2I0NTc5
NDM1Y2MwNmNmNmQyODk3YmI0Zi4uOTA1YTc2NjdlNGUwNGUwZmU0ZTA0OTExMWY5YjNiMDBmM2Nh
ZDI4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAyMDEyLTA3LTEwICBBZGFtIEJhcnRoICA8YWJh
cnRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgUGFyc2UgdGhlIHZpZXdwb3J0IG1ldGEgdGFnIGxp
a2UgaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjcyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE91
ciBwYXJzaW5nIGFwcGVhcnMgdG8gbWF0Y2ggaU9TIGFscmVhZHkuICBUaGlzIHBhdGNoIHNpbXBs
eSBhZGRzIHRlc3RzCisgICAgICAgIHRoYXQgc2hvdyB0aGF0IHdlIGFncmVlIG9uIHRoZXNlIGNh
c2VzLgorCisgICAgICAgICogZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzMy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzNC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTM0Lmh0bWw6IEFkZGVkLgor
CisyMDEyLTA3LTEwICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKICAgICAgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCBzaG91bGQg
bW92ZSB0byBJbnRlcm5hbHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ1NjUyCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQv
dmlld3BvcnQtMTMzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmll
d3BvcnQtMTMzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMWY3MjI5ZWQ0N2FiNGUyNjJjM2U2
MjVlYWM2NzkxOWQ1ZGNjYWZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC92
aWV3cG9ydC92aWV3cG9ydC0xMzMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDM6IFZpZXdwb3J0IGFyZ3VtZW50IHZhbHVlICIxMDsiIGZvciBrZXkg
Im1pbmltdW0tc2NhbGUiIHdhcyB0cnVuY2F0ZWQgdG8gaXRzIG51bWVyaWMgcHJlZml4LgorQUxF
UlQ6IHZpZXdwb3J0IHNpemUgOTgweDEwNzggc2NhbGUgMTAgd2l0aCBsaW1pdHMgWzEwLCAxMF0g
YW5kIHVzZXJTY2FsYWJsZSB0cnVlCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvdmll
d3BvcnQvdmlld3BvcnQtMTMzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3ZpZXdw
b3J0LTEzMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2ZGU1OTg4ZTBlYzY0ZTU1YTM5ZDUwZjUyM2JjOTA5
MGEzMmE3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3Zp
ZXdwb3J0LTEzMy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxoZWFkPgorICAgIDx0aXRsZT5WaWV3
cG9ydCBNRVRBIHdpdGggc2VtaS1jb2xvbnMgIm1pbmltdW0tc2NhbGU9MTA7IG1heGltdW0tc2Nh
bGU9MC4xIi48L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJtaW5p
bXVtLXNjYWxlPTEwOyBtYXhpbXVtLXNjYWxlPTAuMSI+CisgICAgPHNjcmlwdD4KKyAgICAgICAg
ZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgICAgICAgICAgICAgYWxlcnQoaW50ZXJuYWxzLmNvbmZpZ3VyYXRpb25Gb3JWaWV3
cG9ydChkb2N1bWVudCwgMSwgMzIwLCA0ODAsIDMyMCwgMzUyKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpOyI+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzNC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzNC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzU0NWFlYjVkYjBmODhiM2UyZjY0MWE0YWY0YzZiZWQzNWE4ZDQ5
YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQt
MTM0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAz
OiBWaWV3cG9ydCBhcmd1bWVudCB2YWx1ZSAiZGV2aWNlLXdpZHRoOyIgZm9yIGtleSAid2lkdGgi
IG5vdCByZWNvZ25pemVkLiBDb250ZW50IGlnbm9yZWQuCitBTEVSVDogdmlld3BvcnQgc2l6ZSAx
NjB4MTc2IHNjYWxlIDIgd2l0aCBsaW1pdHMgWzIsIDVdIGFuZCB1c2VyU2NhbGFibGUgdHJ1ZQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEzNC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kNzA2ZmRjNTY1ZmU5M2UzMGI2Y2Q1MTIzNWRkN2Y0YWQ3M2IzZTM0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC92aWV3cG9ydC0xMzQuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8aGVhZD4KKyAgICA8dGl0bGU+Vmlld3BvcnQgTUVUQSB3aXRoIHNlbWktY29s
b25zICJ3aWR0aD1kZXZpY2Utd2lkdGg7IGluaXRpYWwtc2NhbGU9MiIuPC90aXRsZT4KKyAgICA8
bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoOyBpbml0aWFs
LXNjYWxlPTIiPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGFs
ZXJ0KGludGVybmFscy5jb25maWd1cmF0aW9uRm9yVmlld3BvcnQoZG9jdW1lbnQsIDEsIDMyMCwg
NDgwLCAzMjAsIDM1MikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKTsiPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>