<?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>134890</bug_id>
          
          <creation_ts>2014-07-14 12:02:33 -0700</creation_ts>
          <short_desc>WebVideoFullscreenInterfaceAVKit should only call the UI from main thread.</short_desc>
          <delta_ts>2014-07-14 15:32:30 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>Unspecified</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="Jeremy Jones">jeremyj-wk</reporter>
          <assigned_to name="Jeremy Jones">jeremyj-wk</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1022272</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2014-07-14 12:02:33 -0700</bug_when>
    <thetext>WebVideoFullscreenInterfaceAVKit should only call the UI from main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022280</commentid>
    <comment_count>1</comment_count>
      <attachid>234872</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2014-07-14 12:19:45 -0700</bug_when>
    <thetext>Created attachment 234872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022284</commentid>
    <comment_count>2</comment_count>
      <attachid>234872</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-07-14 12:46:56 -0700</bug_when>
    <thetext>Comment on attachment 234872
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=234872&amp;action=review

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:592
&gt; +        if (m_playerController)
&gt; +            playerController().delegate = m_videoFullscreenModel;

Why use both m_playerController and playerController()?

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:623
&gt; +        playerController.contentDuration = duration;
&gt; +        playerController.maxTime = duration;
&gt; +        playerController.contentDurationWithinEndTimes = duration;
&gt; +        playerController.loadedTimeRanges = @[@0, @(duration)];
&gt; +        
&gt; +        // FIXME: we take this as an indication that playback is ready.
&gt; +        playerController.canPlay = YES;
&gt; +        playerController.canPause = YES;
&gt; +        playerController.canTogglePlayback = YES;
&gt; +        playerController.hasEnabledAudio = YES;
&gt; +        playerController.canSeek = YES;
&gt; +        playerController.minTime = 0;
&gt; +        playerController.status = AVPlayerControllerStatusReadyToPlay;

In setWebVideoFullscreenModel you test to ensure that m_playerController isn&apos;t NULL. Why is it unnecessary here?

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:637
&gt; +        NSTimeInterval anchorTimeStamp = ![playerController() rate] ? NAN : anchorTime;
&gt; +        AVValueTiming *timing = [getAVValueTimingClass() valueTimingWithAnchorValue:currentTime
&gt; +            anchorTimeStamp:anchorTimeStamp rate:0];
&gt; +        playerController().timing = timing;

Ditto. Also, why does this code use playerController() when above you use playerController.?

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:648
&gt; +        playerController().rate = isPlaying ? playbackRate : 0.;

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:660
&gt; +        playerController().hasEnabledVideo = hasVideo;
&gt; +        playerController().contentDimensions = CGSizeMake(width, height);

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:682
&gt; +        playerController().seekableTimeRanges = seekableRanges;

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:707
&gt; +        playerController().audioMediaSelectionOptions = webOptions;
&gt; +        if (selectedIndex &lt; webOptions.count)
&gt; +            playerController().currentAudioMediaSelectionOption = webOptions[(size_t)selectedIndex];

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:721
&gt; +        playerController().legibleMediaSelectionOptions = webOptions;
&gt; +        if (selectedIndex &lt; webOptions.count)
&gt; +            playerController().currentLegibleMediaSelectionOption = webOptions[(size_t)selectedIndex];

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:740
&gt; +        playerController().externalPlaybackAirPlayDeviceLocalizedName = localizedDeviceName;
&gt; +        playerController().externalPlaybackType = externalPlaybackType;
&gt; +        playerController().externalPlaybackActive = enabled;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022289</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2014-07-14 12:59:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/16917699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022291</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2014-07-14 13:05:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 234872 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234872&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:592
&gt; &gt; +        if (m_playerController)
&gt; &gt; +            playerController().delegate = m_videoFullscreenModel;
&gt; 
&gt; Why use both m_playerController and playerController()?
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:623
&gt; &gt; +        playerController.contentDuration = duration;
&gt; &gt; +        playerController.maxTime = duration;
&gt; &gt; +        playerController.contentDurationWithinEndTimes = duration;
&gt; &gt; +        playerController.loadedTimeRanges = @[@0, @(duration)];
&gt; &gt; +        
&gt; &gt; +        // FIXME: we take this as an indication that playback is ready.
&gt; &gt; +        playerController.canPlay = YES;
&gt; &gt; +        playerController.canPause = YES;
&gt; &gt; +        playerController.canTogglePlayback = YES;
&gt; &gt; +        playerController.hasEnabledAudio = YES;
&gt; &gt; +        playerController.canSeek = YES;
&gt; &gt; +        playerController.minTime = 0;
&gt; &gt; +        playerController.status = AVPlayerControllerStatusReadyToPlay;
&gt; 
&gt; In setWebVideoFullscreenModel you test to ensure that m_playerController isn&apos;t NULL. Why is it unnecessary here?
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:637
&gt; &gt; +        NSTimeInterval anchorTimeStamp = ![playerController() rate] ? NAN : anchorTime;
&gt; &gt; +        AVValueTiming *timing = [getAVValueTimingClass() valueTimingWithAnchorValue:currentTime
&gt; &gt; +            anchorTimeStamp:anchorTimeStamp rate:0];
&gt; &gt; +        playerController().timing = timing;
&gt; 
&gt; Ditto. Also, why does this code use playerController() when above you use playerController.?
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:648
&gt; &gt; +        playerController().rate = isPlaying ? playbackRate : 0.;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:660
&gt; &gt; +        playerController().hasEnabledVideo = hasVideo;
&gt; &gt; +        playerController().contentDimensions = CGSizeMake(width, height);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:682
&gt; &gt; +        playerController().seekableTimeRanges = seekableRanges;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:707
&gt; &gt; +        playerController().audioMediaSelectionOptions = webOptions;
&gt; &gt; +        if (selectedIndex &lt; webOptions.count)
&gt; &gt; +            playerController().currentAudioMediaSelectionOption = webOptions[(size_t)selectedIndex];
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:721
&gt; &gt; +        playerController().legibleMediaSelectionOptions = webOptions;
&gt; &gt; +        if (selectedIndex &lt; webOptions.count)
&gt; &gt; +            playerController().currentLegibleMediaSelectionOption = webOptions[(size_t)selectedIndex];
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:740
&gt; &gt; +        playerController().externalPlaybackAirPlayDeviceLocalizedName = localizedDeviceName;
&gt; &gt; +        playerController().externalPlaybackType = externalPlaybackType;
&gt; &gt; +        playerController().externalPlaybackActive = enabled;
&gt; 
&gt; Ditto.

So long as playerController() is called before m_playerController is used, this are fine.

Filed https://bugs.webkit.org/show_bug.cgi?id=134895 for consistent use of playerController() and m_playerController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022339</commentid>
    <comment_count>5</comment_count>
      <attachid>234872</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-14 15:32:28 -0700</bug_when>
    <thetext>Comment on attachment 234872
Patch

Clearing flags on attachment: 234872

Committed r171089: &lt;http://trac.webkit.org/changeset/171089&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022340</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-14 15:32:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234872</attachid>
            <date>2014-07-14 12:19:45 -0700</date>
            <delta_ts>2014-07-14 15:32:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134890-20140714121928.patch</filename>
            <type>text/plain</type>
            <size>9722</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwOTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI1MTc1OGVjN2JhOGIx
MDY5YzU2YjRjMzFiYjhhYjEyYWI5YjY2MS4uMGM2YTM4NTQzZmU2MjY3OGIzMTcxOGM0M2M0MzQ0
ZjFmM2JkMWY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA3LTE0ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdCBzaG91bGQgb25seSBjYWxsIHRoZSBVSSBmcm9tIG1haW4gdGhyZWFk
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0ODkw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgZGlzcGF0
Y2hfYXN5bmMgdG8gdGhlIG1haW4gdGhyZWFkIGJlZm9yZSBzZXR0aW5nIHByb3BlcnRpZXMgdGhh
dCB3b3VsZCBhZmZlY3QgdGhlIFVJLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKTogd3JhcCBpbiBjYWxs
IHRvIGRpc3BhdGNoX2FzeW5jCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0RHVyYXRpb24pOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0RpbWVuc2lvbnMpOiBkaXR0bworICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNlZWthYmxlUmFuZ2Vz
KTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRB
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6IGRp
dHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0RXh0ZXJu
YWxQbGF5YmFjayk6IGRpdHRvCisKIDIwMTQtMDctMDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIERPTVdpbmRvd3Mgc2hvdWxkIHJlZ2lzdGVyIHRoZW1zZWx2
ZXMgd2l0aCB0aGUgR2FtZXBhZE1hbmFnZXIgd2hlbiB0aGV5IGhhdmUgZXZlbnQgbGlzdGVuZXJz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggNjdiM2JhZDk1MTIxZWE4MjQyZTc1
M2I1OWQ4MjBhNTAzODBmYTlmNC4uNzg1N2JkMGQxZTI2YjczNzRmMWU4YTlhNzhiODkyOTE1ZmQ2
MGE1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpAQCAtNTg1LDggKzU4NSwxNCBA
QCBXZWJBVlBsYXllckNvbnRyb2xsZXIgKldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpwbGF5ZXJDb250cm9sbGVyKCkKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBt
b2RlbCkKIHsKICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbW9kZWw7Ci0gICAgaWYgKG1f
cGxheWVyQ29udHJvbGxlcikKLSAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLmRlbGVnYXRlID0g
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKKyAgICAKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAobV9wbGF5ZXJD
b250cm9sbGVyKQorICAgICAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLmRlbGVnYXRlID0gbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbDsKKyAgICAgICAgCisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIqIG9ic2VydmVyKQpAQCAtNTk4LDM5ICs2MDQsNjMgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQogewog
ICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IHRoaXMtPnBsYXll
ckNvbnRyb2xsZXIoKTsKICAgICAKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzAxNyB1c2UgY29ycmVjdCB2YWx1ZXMgaW5zdGVhZCBvZiBk
dXJhdGlvbiBmb3IgYWxsIHRoZXNlCi0gICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRp
b24gPSBkdXJhdGlvbjsKLSAgICBwbGF5ZXJDb250cm9sbGVyLm1heFRpbWUgPSBkdXJhdGlvbjsK
LSAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzID0gZHVy
YXRpb247Ci0gICAgcGxheWVyQ29udHJvbGxlci5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChk
dXJhdGlvbildOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBwcm90ZWN0KHRoaXMpOwogICAgIAotICAgIC8vIEZJWE1FOiB3ZSB0YWtlIHRoaXMg
YXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LgotICAgIHBsYXllckNvbnRy
b2xsZXIuY2FuUGxheSA9IFlFUzsKLSAgICBwbGF5ZXJDb250cm9sbGVyLmNhblBhdXNlID0gWUVT
OwotICAgIHBsYXllckNvbnRyb2xsZXIuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7Ci0gICAgcGxh
eWVyQ29udHJvbGxlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7Ci0gICAgcGxheWVyQ29udHJvbGxl
ci5jYW5TZWVrID0gWUVTOwotICAgIHBsYXllckNvbnRyb2xsZXIubWluVGltZSA9IDA7Ci0gICAg
cGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRv
UGxheTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewor
ICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNzAxNyB1c2UgY29ycmVjdCB2YWx1ZXMgaW5zdGVhZCBvZiBkdXJhdGlvbiBmb3IgYWxsIHRo
ZXNlCisgICAgICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uID0gZHVyYXRpb247
CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIubWF4VGltZSA9IGR1cmF0aW9uOworICAgICAgICBw
bGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzID0gZHVyYXRpb247
CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAsIEAoZHVy
YXRpb24pXTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4g
aW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LgorICAgICAgICBwbGF5ZXJDb250cm9s
bGVyLmNhblBsYXkgPSBZRVM7CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGF1c2UgPSBZ
RVM7CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7Cisg
ICAgICAgIHBsYXllckNvbnRyb2xsZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAgICAgICBw
bGF5ZXJDb250cm9sbGVyLmNhblNlZWsgPSBZRVM7CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIu
bWluVGltZSA9IDA7CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIuc3RhdHVzID0gQVZQbGF5ZXJD
b250cm9sbGVyU3RhdHVzUmVhZHlUb1BsYXk7CisgICAgICAgIAorICAgICAgICBwcm90ZWN0LmNs
ZWFyKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnNldEN1cnJlbnRUaW1lKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUp
CiB7Ci0gICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVtwbGF5ZXJDb250cm9s
bGVyKCkgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOwotICAgIEFWVmFsdWVUaW1pbmcgKnRpbWlu
ZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpj
dXJyZW50VGltZQotICAgICAgICBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6
MF07Ci0gICAgcGxheWVyQ29udHJvbGxlcigpLnRpbWluZyA9IHRpbWluZzsKKyAgICBfX2Jsb2Nr
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsK
KyAgICAKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewor
ICAgICAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW3BsYXllckNvbnRyb2xs
ZXIoKSByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7CisgICAgICAgIEFWVmFsdWVUaW1pbmcgKnRp
bWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1
ZTpjdXJyZW50VGltZQorICAgICAgICAgICAgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFt
cCByYXRlOjBdOworICAgICAgICBwbGF5ZXJDb250cm9sbGVyKCkudGltaW5nID0gdGltaW5nOwor
ICAgICAgICAKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOwogfQogCiB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBm
bG9hdCBwbGF5YmFja1JhdGUpCiB7Ci0gICAgcGxheWVyQ29udHJvbGxlcigpLnJhdGUgPSBpc1Bs
YXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLjsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKKyAgICAKKyAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBwbGF5ZXJDb250
cm9sbGVyKCkucmF0ZSA9IGlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuOworICAgICAgICAK
KyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywg
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKIHsKLSAgICBwbGF5ZXJDb250cm9sbGVyKCkuaGFz
RW5hYmxlZFZpZGVvID0gaGFzVmlkZW87Ci0gICAgcGxheWVyQ29udHJvbGxlcigpLmNvbnRlbnRE
aW1lbnNpb25zID0gQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKKyAgICAK
KyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAg
ICBwbGF5ZXJDb250cm9sbGVyKCkuaGFzRW5hYmxlZFZpZGVvID0gaGFzVmlkZW87CisgICAgICAg
IHBsYXllckNvbnRyb2xsZXIoKS5jb250ZW50RGltZW5zaW9ucyA9IENHU2l6ZU1ha2Uod2lkdGgs
IGhlaWdodCk7CisgICAgICAgIAorICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNlZWthYmxlUmFu
Z2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMpCkBAIC02NDYsNyArNjc2LDEzIEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNlZWthYmxlUmFuZ2VzKGNv
bnN0IFRpbWVSYW5nZXMmIHRpbWVSCiAgICAgICAgIFtzZWVrYWJsZVJhbmdlcyBhZGRPYmplY3Q6
W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKICAgICB9CiAgICAgCi0gICAg
cGxheWVyQ29udHJvbGxlcigpLnNlZWthYmxlVGltZVJhbmdlcyA9IHNlZWthYmxlUmFuZ2VzOwor
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90
ZWN0KHRoaXMpOworICAgIAorICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIoKS5zZWVrYWJsZVRpbWVSYW5nZXMg
PSBzZWVrYWJsZVJhbmdlczsKKyAgICAgICAgCisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAg
ICB9KTsKIH0KIAogc3RhdGljIE5TTXV0YWJsZUFycmF5ICptZWRpYVNlbGVjdGlvbk9wdGlvbnMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMpCkBAIC02NjMsMTcgKzY5OSwyOSBAQCBzdGF0
aWMgTlNNdXRhYmxlQXJyYXkgKm1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgb3B0aW9ucykKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJPcHRp
b25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwotICAgIHBsYXllckNvbnRyb2xs
ZXIoKS5hdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyA9IHdlYk9wdGlvbnM7Ci0gICAgaWYgKHNl
bGVjdGVkSW5kZXggPCB3ZWJPcHRpb25zLmNvdW50KQotICAgICAgICBwbGF5ZXJDb250cm9sbGVy
KCkuY3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb24gPSB3ZWJPcHRpb25zWyhzaXplX3Qp
c2VsZWN0ZWRJbmRleF07CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHByb3RlY3QodGhpcyk7CisgICAgCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLmF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gd2ViT3B0aW9uczsKKyAgICAgICAgaWYgKHNlbGVj
dGVkSW5kZXggPCB3ZWJPcHRpb25zLmNvdW50KQorICAgICAgICAgICAgcGxheWVyQ29udHJvbGxl
cigpLmN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uID0gd2ViT3B0aW9uc1soc2l6ZV90
KXNlbGVjdGVkSW5kZXhdOworICAgICAgICAKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAg
IH0pOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRMZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJPcHRpb25z
ID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwotICAgIHBsYXllckNvbnRyb2xsZXIo
KS5sZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gd2ViT3B0aW9uczsKLSAgICBpZiAoc2Vs
ZWN0ZWRJbmRleCA8IHdlYk9wdGlvbnMuY291bnQpCi0gICAgICAgIHBsYXllckNvbnRyb2xsZXIo
KS5jdXJyZW50TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uID0gd2ViT3B0aW9uc1soc2l6ZV90
KXNlbGVjdGVkSW5kZXhdOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBwcm90ZWN0KHRoaXMpOworICAgIAorICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIHBsYXllckNvbnRyb2xsZXIoKS5s
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gd2ViT3B0aW9uczsKKyAgICAgICAgaWYgKHNl
bGVjdGVkSW5kZXggPCB3ZWJPcHRpb25zLmNvdW50KQorICAgICAgICAgICAgcGxheWVyQ29udHJv
bGxlcigpLmN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb24gPSB3ZWJPcHRpb25zWyhz
aXplX3Qpc2VsZWN0ZWRJbmRleF07CisgICAgICAgIAorICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKQEAgLTY4NCwxMCArNzMy
LDE2IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFs
UGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hCiAgICAgZWxzZSBpZiAodGFyZ2V0VHlwZSA9
PSBUYXJnZXRUeXBlVFZPdXQpCiAgICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5
ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKIAotICAgIHBsYXllckNvbnRy
b2xsZXIoKS5leHRlcm5hbFBsYXliYWNrQWlyUGxheURldmljZUxvY2FsaXplZE5hbWUgPSBsb2Nh
bGl6ZWREZXZpY2VOYW1lOwotICAgIHBsYXllckNvbnRyb2xsZXIoKS5leHRlcm5hbFBsYXliYWNr
VHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOwotICAgIHBsYXllckNvbnRyb2xsZXIoKS5leHRl
cm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKLSAgICBbbV92aWRlb0xheWVyQ29udGFpbmVy
LmdldCgpIHNldEhpZGRlbjplbmFibGVkXTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcHJvdGVjdCh0aGlzKTsKKyAgICAKKyAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBwbGF5ZXJDb250
cm9sbGVyKCkuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6ZWROYW1lID0gbG9j
YWxpemVkRGV2aWNlTmFtZTsKKyAgICAgICAgcGxheWVyQ29udHJvbGxlcigpLmV4dGVybmFsUGxh
eWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7CisgICAgICAgIHBsYXllckNvbnRyb2xs
ZXIoKS5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKKyAgICAgICAgW21fdmlkZW9M
YXllckNvbnRhaW5lci5nZXQoKSBzZXRIaWRkZW46ZW5hYmxlZF07CisgICAgICAgIAorICAgICAg
ICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihQbGF0Zm9ybUxheWVyJiB2aWRlb0xheWVy
LCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>