拔萝卜91 I 白白色免费视频 I 白白色在线观看 I 白峰美羽在线播放 I 白浆网站 I 白浆在线 I 白嫩白嫩国产精品 I 白丝女仆被免费网站 I 白丝校花扒腿让我c I 白袜免费网站xx视频 I 百合sm惩罚室羞辱调教 I 办公室大战高跟丝袜秘书经理ol I 半推半就一ⅹ99av I 宝贝乖~胸罩脱了让我揉你的胸 I 宝贝乖h调教灌尿穿环 I 抱着老师的嫩臀猛然挺进视频 I 爆操白虎 I 爆操极品 I 爆操巨乳 I 爆操老女人 I 爆操欧美 I 爆操少妇 I 爆操网站 I 爆操小萝莉 I 北岛玲av I 北岛玲在线 I 北条麻妃av电影 I 北条麻妃av在线

得物H5容器野指針疑難問題排查 & 解決

來源:得物技術
1、背景

得物 iOS 4.9.x 版本 上線后,一些帶有橫向滾動內容的h5頁面,有一個webkit 相關crash增加較快。通過Crash堆棧判斷是UIScrollview執行滾動動畫過程中內存野指針導致的崩潰。

2、前期排查

通過頁面瀏覽日志,發現發生崩潰時所在的頁面都是在h5 web容器內,且都是在頁面的生命周期方法viewDidDisappear方法調用后才發生崩潰,因此推測崩潰是在h5 頁面返回時發生的。


【資料圖】

剛好交易的同事復現了崩潰證實了我們的推測。因此可以基本確定:崩潰的原因是頁面退出后,頁面內存被釋放,但是滾動動畫繼續執行,這時崩潰堆棧中scrollview的delegate沒有置空,系統繼續執行delegate的相關方法,訪問了已經釋放的對象的內存(野指針問題)。

同時發生crash h5 頁面都存在一個特點,就是頁面內存在可以左右橫滑的tab視圖。

操作手勢側滑存在體驗問題,左右橫滑的tab視圖也會跟著滾動(見下面視頻)。關聯bugly用戶行為日志,判斷這個體驗問題是和本文中的crash有相關性的。

3、不完美的解決方案

經過上面的分析,修復思路是在h5頁面手勢側滑返回時,將h5容器頁面內tab的橫滑手勢禁掉(同時需要在 h5 web容器的viewWillAppear方法里將手勢再打開,因為手勢側滑是可以取消在返回頁面)。

具體代碼如下(這樣在操作頁面側滑返回時,頁面的手勢被禁掉,不會再滾動):

@objc dynamic func webViewCanScroll(enable:Bool) {        let contentView = self.webView.scrollView.subviews.first { view in            if let className = object_getClass(view), NSStringFromClass(className) == "WKContentView" {                return true            }            return false        }        let webTouchEventsGestureRecognizer = contentView?.gestureRecognizers?.first(where: { gesture in            if let className = object_getClass(gesture), NSStringFromClass(className) == "UIWebTouchEventsGestureRecognizer" {                return true            }            return false        })        webTouchEventsGestureRecognizer?.isEnabled = enable    }@objc dynamic func webViewCanScroll(enable:Bool) {        let contentView = self.webView.scrollView.subviews.first { view in            if let className = object_getClass(view), NSStringFromClass(className) == "WKContentView" {                return true            }            return false        }        let webTouchEventsGestureRecognizer = contentView?.gestureRecognizers?.first(where: { gesture in            if let className = object_getClass(gesture), NSStringFromClass(className) == "UIWebTouchEventsGestureRecognizer" {                return true            }            return false        })        webTouchEventsGestureRecognizer?.isEnabled = enable    }

經過測試,h5 web容器側滑時出現的tab頁面左右滾動的體驗問題確實被解決。這樣既可以解決體驗問題,又可以解決側滑離開頁面導致的崩潰問題,但是這樣并沒有定位crash的根因。修復代碼上線后,crash量確實下降,但是每天還是有一些crash出現,且收到了個別頁面極端操作下偶現卡住的問題反饋。因此需要繼續排查crash根因,將crash根本解決掉。

繼續看文章開始的crash堆棧,通過Crash堆棧判斷崩潰原因是UIScrollview執行滾動動畫過程中回調代理方法(見上圖)時訪問被釋放的內存。常規解決思路是在退出頁面后,在頁面生命周期的dealloc方法中,將UIScrollview的delegate置空即可。WKWebView確實有一個scrollVIew屬性,我們在很早的版本就將其delegate屬性置空,但是崩潰沒有解決。

deinit {         scrollView.delegate = nil         scrollView.dataSource = nil    }deinit {         scrollView.delegate = nil         scrollView.dataSource = nil    }

因此崩潰堆棧里的Scrollview代理不是這里的WKWebView的scrollVIew的代理。那崩潰堆棧中的scrollView代理到底屬于哪個UIScrollview呢?幸運的是蘋果webkit 是開源的,我們可以將webkit源碼下載下來看一下。

4、尋找崩潰堆棧中的ScrollViewDelegate

崩潰堆棧中的ScrollViewDelegate是WKScrollingNodeScrollViewDelegate。首先看看WKWebView的scrollview的 delegate是如何實現的,因為我們猜想這個scrollview的delegate除了我們自己設置的,是否還有其他delegate(比如崩潰堆棧中的WKScrollingNodeScrollViewDelegate)。

通過對Webkit源碼一番研究,發現scrollview的初始化方法:

- (void)_setupScrollAndContentViews{    CGRect bounds = self.bounds;    _scrollView = adoptNS([[WKScrollView alloc] initWithFrame:bounds]);    [_scrollView setInternalDelegate:self];    [_scrollView setBouncesZoom:YES];}- (void)_setupScrollAndContentViews{    CGRect bounds = self.bounds;    _scrollView = adoptNS([[WKScrollView alloc] initWithFrame:bounds]);    [_scrollView setInternalDelegate:self];    [_scrollView setBouncesZoom:YES];}

WKWebView的scrollVIew 是WKScrollView 類型。

4.1 WKScrollView 代理實現

首先看到WKWebView的scrollview的類型其實是WKScrollView(UIScrollview的子類),他除了繼承自父類的delegate屬性,還有一個internalDelegate屬性,那么這個internalDelegate屬性是不是我們要找的WKScrollingNodeScrollViewDelegate 呢?

@interface WKScrollView : UIScrollView@property (nonatomic, assign) WKWebView  *internalDelegate;@end@interface WKScrollView : UIScrollView@property (nonatomic, assign) WKWebView  *internalDelegate;@end

通過閱讀源碼后發現不是這樣的(代碼有刪減,感興趣可自行閱讀源碼)。

- (void)setInternalDelegate:(WKWebView  *)internalDelegate{    if (internalDelegate == _internalDelegate)        return;    _internalDelegate = internalDelegate;    [self _updateDelegate];}- (void)setDelegate:(id )delegate{    if (_externalDelegate.get().get() == delegate)        return;    _externalDelegate = delegate;    [self _updateDelegate];}- (id )delegate{    return _externalDelegate.getAutoreleased();}- (void)_updateDelegate{//......    if (!externalDelegate)    else if (!_internalDelegate)    else {        _delegateForwarder = adoptNS([[WKScrollViewDelegateForwarder alloc] initWithInternalDelegate:_internalDelegate externalDelegate:externalDelegate.get()]);        [super setDelegate:_delegateForwarder.get()];    }}- (void)setInternalDelegate:(WKWebView  *)internalDelegate{    if (internalDelegate == _internalDelegate)        return;    _internalDelegate = internalDelegate;    [self _updateDelegate];}- (void)setDelegate:(id )delegate{    if (_externalDelegate.get().get() == delegate)        return;    _externalDelegate = delegate;    [self _updateDelegate];}- (id )delegate{    return _externalDelegate.getAutoreleased();}- (void)_updateDelegate{//......    if (!externalDelegate)    else if (!_internalDelegate)    else {        _delegateForwarder = adoptNS([[WKScrollViewDelegateForwarder alloc] initWithInternalDelegate:_internalDelegate externalDelegate:externalDelegate.get()]);        [super setDelegate:_delegateForwarder.get()];    }}

這個internalDelegate的作用是讓WKWebView 監聽scrollview的滾動回調,同時也可以讓開發者在外部監聽WKWebView的scrollview回調。如何實現的呢?可以查看WKScrollViewDelegateForwarder的實現。

- (void)forwardInvocation:(NSInvocation *)anInvocation{    //...    if (internalDelegateWillRespond)        [anInvocation invokeWithTarget:_internalDelegate];    if (externalDelegateWillRespond)        [anInvocation invokeWithTarget:externalDelegate.get()];}- (void)forwardInvocation:(NSInvocation *)anInvocation{    //...    if (internalDelegateWillRespond)        [anInvocation invokeWithTarget:_internalDelegate];    if (externalDelegateWillRespond)        [anInvocation invokeWithTarget:externalDelegate.get()];}

通過復寫- (void)forwardInvocation:(NSInvocation *)anInvocation 方法,在消息轉發時實現的。

4.2 猜想 & 驗證

既然WKScrollingNodeScrollViewDelegate 不是WKScrollview的屬性,那說明崩潰堆棧中的scrollview不是WKScrollview,那頁面上還有其他scrollview么。我們看源碼WKScrollingNodeScrollViewDelegate 是在哪里設置的。

void ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren(const ScrollingStateScrollingNode& scrollingStateNode){        //......        if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::Property::ScrollContainerLayer)) {            if (!m_scrollViewDelegate)                m_scrollViewDelegate = adoptNS([[WKScrollingNodeScrollViewDelegate alloc] initWithScrollingTreeNodeDelegate:this]);        } }void ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren(const ScrollingStateScrollingNode& scrollingStateNode){        //......        if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::Property::ScrollContainerLayer)) {            if (!m_scrollViewDelegate)                m_scrollViewDelegate = adoptNS([[WKScrollingNodeScrollViewDelegate alloc] initWithScrollingTreeNodeDelegate:this]);        } }

搜索webkit的源碼,發現創建WKScrollingNodeScrollViewDelegate的位置只有一處。但是webkit的源碼太過于復雜,無法通過閱讀源碼的方式知道WKScrollingNodeScrollViewDelegate屬于哪個scrollview。

為此我們只能換一種思路,我們通過xcode調試的方式查看當前webview加載的頁面是否還有其他scrollview。

頁面上剛好還有一個scrollview:WKChildScrollview

這個WKChildScrollview 是否是崩潰堆棧中的scrollview呢,如果我們能確定他的delegate是WKScrollingNodeScrollViewDelegate,那就說明這個WKChildScrollview 是崩潰堆棧中的scrollview。

為了驗證這個猜想,我們首先找到源碼,源碼并沒有太多,看不出其delegate類型。

@interface WKChildScrollView : UIScrollView @end@interface WKChildScrollView : UIScrollView @end

我們只能轉換思路在運行時找到WKWebView的類型為WKChildScrollView的子view(通過OC runtime & 視圖樹遍歷的方式),判斷他的delegate是否為WKScrollingNodeScrollViewDelegate 。

我們運行時找到類型為 WKChildScrollView 的子view后,獲取其delegate類型,確實是WKScrollingNodeScrollViewDelegate。至此我們找到了崩潰堆棧中的scrollview。

確定了崩潰堆棧中的scrollview的類型,那么修復起來也比較容易了。在頁面生命周期的viewDidAppear方法里,獲取類型為 WKChildScrollView的子view。然后在dealloc方法里,將其delegate置空即可。

deinit {        if self.childScrollView != nil {            if self.childScrollView?.delegate != nil {                 self.childScrollView?.delegate = nil             }        }}deinit {        if self.childScrollView != nil {            if self.childScrollView?.delegate != nil {                 self.childScrollView?.delegate = nil             }        }}
4.3 小程序同層渲染

想完了解決方案,那么WKChildScrollView 是做啥用的呢?

WKWebView 在內部采用的是分層的方式進行渲染,它會將 WebKit 內核生成的 Compositing Layer(合成層)渲染成 iOS 上的一個 WKCompositingView,這是一個客戶端原生的 View,不過可惜的是,內核一般會將多個 DOM 節點渲染到一個 Compositing Layer 上,因此合成層與 DOM 節點之間不存在一對一的映射關系。當把一個 DOM 節點的 CSS 屬性設置為overflow: scroll(低版本需同時設置-webkit-overflow-scrolling: touch)之后,WKWebView 會為其生成一個WKChildScrollView,與 DOM 節點存在映射關系,這是一個原生的UIScrollView的子類,也就是說 WebView 里的滾動實際上是由真正的原生滾動組件來承載的。WKWebView 這么做是為了可以讓 iOS 上的 WebView 滾動有更流暢的體驗。雖說WKChildScrollView也是原生組件,但 WebKit 內核已經處理了它與其他 DOM 節點之間的層級關系,這一特性可以用來做小程序的同層渲染。(「同層渲染」顧名思義則是指通過一定的技術手段把原生組件直接渲染到 WebView 層級上,此時「原生組件層」已經不存在,原生組件此時已被直接掛載到 WebView 節點上。你幾乎可以像使用非原生組件一樣去使用「同層渲染」的原生組件,比如使用view、image覆蓋原生組件、使用z-index指定原生組件的層級、把原生組件放置在scroll-view、swiper、movable-view等容器內等等)。

5、蘋果的修復方案

本著嚴謹的態度,我們想是什么導致了最開始的崩潰堆棧呢?是我們開發過程中的功能還是系統bug?如果是系統bug,其他公司也可能遇到,但是互聯網上搜不到其他公司或開發者討論崩潰相關信息。我們繼續看一下崩潰堆棧的top 函數RemoteScrollingTree::scrollingTreeNodeDidScroll() 源碼如下:

void RemoteScrollingTree::scrollingTreeNodeDidScroll(ScrollingTreeScrollingNode& node, ScrollingLayerPositionAction scrollingLayerPositionAction){    ASSERT(isMainRunLoop());    ScrollingTree::scrollingTreeNodeDidScroll(node, scrollingLayerPositionAction);    if (!m_scrollingCoordinatorProxy)        return;    std::optional layoutViewportOrigin;    if (is(node))        layoutViewportOrigin = downcast(node).layoutViewport().location();    m_scrollingCoordinatorProxy->scrollingTreeNodeDidScroll(node.scrollingNodeID(), node.currentScrollPosition(), layoutViewportOrigin, scrollingLayerPositionAction);}void RemoteScrollingTree::scrollingTreeNodeDidScroll(ScrollingTreeScrollingNode& node, ScrollingLayerPositionAction scrollingLayerPositionAction){    ASSERT(isMainRunLoop());    ScrollingTree::scrollingTreeNodeDidScroll(node, scrollingLayerPositionAction);    if (!m_scrollingCoordinatorProxy)        return;    std::optional layoutViewportOrigin;    if (is(node))        layoutViewportOrigin = downcast(node).layoutViewport().location();    m_scrollingCoordinatorProxy->scrollingTreeNodeDidScroll(node.scrollingNodeID(), node.currentScrollPosition(), layoutViewportOrigin, scrollingLayerPositionAction);}

崩潰在這個函數里,查看這個函數的commit記錄:

簡單描述一下就是scrollingTreeNodeDidScroll方法中使用的m_scrollingCoordinatorProxy 對象改成weak指針,并進行判空操作。這種改變,正是解決m_scrollingCoordinatorProxy 內存被釋放后還在訪問的方案。

這個commit是2023年2月28號提交的,commit log是:

[UI-side compositing] RemoteScrollingTree needs to hold a weak ref to the RemoteScrollingCoordinatorProxyhttps://bugs.webkit.org/show_bug.cgi?id=252963rdar://105949247Reviewed by Tim Horton.The scrolling thread can extend the lifetime of the RemoteScrollingTree via activity on that thread,so RemoteScrollingTree needs to hold a nullable reference to the RemoteScrollingCoordinatorProxy;use a WeakPtr.[UI-side compositing] RemoteScrollingTree needs to hold a weak ref to the RemoteScrollingCoordinatorProxyhttps://bugs.webkit.org/show_bug.cgi?id=252963rdar://105949247Reviewed by Tim Horton.The scrolling thread can extend the lifetime of the RemoteScrollingTree via activity on that thread,so RemoteScrollingTree needs to hold a nullable reference to the RemoteScrollingCoordinatorProxy;use a WeakPtr.

至此,我們基本確認,這個崩潰堆棧是webkit內部實現的一個bug,蘋果內部開發者最終使用弱引用的方式解決。

同時修復上線后,這個crash的崩潰量也降為0。

6、總結

本文中的crash從出現到解決歷時近一年,一開始根據線上日志判斷是h5 頁面返回 & h5 頁面滾動導致的問題,禁用手勢后雖然幾乎解決問題,但是線上還有零星crash上報,因此為了保證h5 離線功能的線上穩定性,需要完美解決問題。

本文的crash 似曾相識,但是經過驗證和閱讀源碼后發現并不是想象的那樣,繼續通過猜想+閱讀源碼的方式尋找到了崩潰堆棧中的真正scrollview代理對象,從而在app 側解決問題。最后發現是蘋果webkit的bug。

本文中的崩潰問題本質上是野指針問題,那么野指針問題定位有沒有通用的解決方案呢?

標簽:

推薦

財富更多》

動態更多》

熱點

主站蜘蛛池模板: 激情 小说 亚洲 图片 伦| 米奇四色影视| 国产高清精品软男同| 日韩精品视频网站| 亚洲中文字幕无码天然素人| 亚洲视频在线不卡| 国产成人亚洲综合无码18禁h| 综合国产视频| 超碰在线资源站| 色屁屁www影院免费观看| 中文国产在线视频| 久久人人做人人爽人人av| 天天狠天天透天干天天怕∴| 久久www成人_看片免费不卡| 精品一区二区三区三区| 久久久噜噜噜久久狠狠50岁| 五月天福利视频| 在线观看高清av| 美女性感视频久久| 自拍偷拍视频在线| 成年人午夜久久久| 午夜a成v人电影| 春色资源中文在线| 亚洲欧美激情图片| 综合性色| 无码ol丝袜高跟秘书在线观看 | 无码纯肉视频在线观看| 蜜臀av人妻国产精品建身房| 成人爽a毛片| 黄色免费国产| 亚洲午夜精品久久久中文影院| 草莓巧克力香氛动漫的观看方法| 自拍偷拍 亚洲| 久久无码国产日本欧美| 爽爽视频在线免费观看| 狠狠色亚洲| 波多野结衣久久资源| 国产一区二区三区免费播放| 99er国产精品| 一级特黄曰皮片视频| 一级成人网| 久久精品人人做人人爽电影蜜月 | 91popny肥熟国产老肥熟| 色亚洲一区二区| 69av网站| 国产一区二区三区免费视频| 欧美黄色片在线观看| 精品国产髙清在线看国产毛片| 99男女国产精品免费视频| 羞羞影院午夜男女爽爽影院网站| 国产一区二区在线视频| 亚洲成a∨人在线播放欧美| 99精品999| 久久亚洲国产视频| 欧美自拍亚洲综合丝袜| 欧美一区二区三区的| 一级做a爰片久久毛片一| 国产特级淫片| 日韩a视频| 人人干超碰| 国产青榴视频在线观看| 美女少妇精品视频| 亚洲不卡中文字幕| 黑人上司与人妻激烈中文字幕| 亚洲夜夜夜| 国产成人99精品免费视频明星| 99久久99这里只有免费费精品| 亚洲色视频| 国产九色| 久久久欧美| 成人乱码一区二区三区av66| aaa级黄色片| 国产精品视频三级| 色欧美在线| 一级国产20岁美女毛片| 国产伊人av| 超级碰碰碰97| 精品久久综合| 美女大黄动图| 体内精69xxxxxx| 久久国产精品99精品国产987| 日韩精品人妻中文字幕有码| 欧美激情视频免费看| 国产,日韩,欧美一区| 我爱avav中文字幕| 国产好大好硬好爽免费视频| 免费在线观看日韩视频| 精品无码国产污污污免费| 四虎wz| 久久深夜视频| 婷婷久久国产对白刺激五月99| 亚洲精华国产| 日韩有码欧美| 色片av| 国产精品性做久久久久久| 女人与公拘交酡全过程| 我们再来一次在线观看免费| 一区二区三区不卡视频| 国产精品久久人妻互换| 涩涩综合| 国产视频影院| 国产亚洲精品久| 永久av免费在线看| a级免费黄色片| 成人午夜视频在线播放| 中文字幕在线第一页| 夜精品一区二区无码a片| 久99久久| 毛片一级a| 亚洲人辣妹窥探嘘嘘| 亚洲免费一级| 日本一级淫片免费看| 动漫涩涩免费网站在线看| 日本高清特黄刺激大片| 亚洲成色777777在线观看影院| 99碰碰| 色综合视频网站| 日本高色高清视频| 粉嫩粉嫩看着都硬av| 伊人网综合在线| 国产精品第六页| 操人视频免费| 成人天天干| 综合伊人av| 亚洲高清乱码| 久久国产精品72免费观看| 三级影片在线播放| 日韩簧片| 国产精品捆绑调教网站| 涩涩av在线| 天天舔天天操天天干| 亚洲成a∧人片在线观看无码| 免费久久99精品国产自在现线| 亚洲欧洲xxxx| 玩弄少妇人妻| 国产手机精品视频| 久久久999久久久| 成人激情小说视频| 看黄a大片日本真人视频直播| 亚洲国产欧美在线人成最新| 天天干夜夜玩| 三区精品视频| 国产黄免费看| 亚洲人在线播放| 国产av老师丝袜美腿丝袜| 日韩高清av片| 六月婷婷激情网| 看欧美大片| 91精品国产高清| 欧美精品偷拍| 色诱av| 午夜午夜| 又色又污又黄又爽又吃胸| 好硬好湿好爽好深视频| 在线观看免费视频网站a站| 国产人澡人澡澡澡人视频| 国产视频在线观看一区二区| 桃花源av在线播放| 日韩乱码人妻无码中文字幕视频| 国产麻豆9l精品三级站| 狠狠色图片| 国产精品亚洲二区在线播放 | 成人一级毛片视频| 黄色免费视频在线观看| jizzjizz亚洲| 六月色播| 日本黄色激情视频| 久久久久欧美| 亚洲大片在线播放| 亚洲精品乱码| 天天躁夜夜躁狠狠躁2021| 免费在线观看日韩视频| 欧美一级视屏| 一本综合久久| 日韩毛片影院| www.国产在线视频| 欧美老熟妇乱子| 国产精品人妻一区夜夜爱| 永久免费看片在线| 亚欧美一区二区| 草草影院ccyy国产日本欧美| 国产日韩欧美| 成人中文字幕+乱码+中文字幕| 国产a级全部精品| 天天综合日日夜夜| 久久人妻少妇偷人精品综合桃色| 国产成人精品微拍视频网址| 在线看片网址| 亚洲成av人片无码不卡播放器| 国产一二三在线视频| 国产精品v日韩精品v在线观看| 亚洲精品久久久久久久蜜臀老牛| 亚洲天堂资源在线| 午夜亚洲性色福利视频| 一个人看的毛片| 午夜激情爱爱视频网站| 亚洲va中文在线播放免费| www.色就是色.com| 亚洲免费鲁丝片| 国产精美视频| 激情文学欧美| 国产精品成人观看视频| 看中国黄色毛片| 亚洲五月丁香综合视频| 日本边添边摸边做边爱小视频| 亚洲成人基地| 杨幂毛片午夜性生毛片| 懂色av噜噜一区二区三区av88| 国产视频线观看永久免费| 美女张开腿让人桶| 日本免费高清一本视频| 奇米影视777色狠狠蜜桃| 天堂网中文在线www| yy6688亚洲第一网站| 香港三级日本三级妇三级| 豆花视频成人网| 好爽好黄的视频| 婷婷婷婷婷婷涩涩| 69精品久久| 一本色道久久99精品综合| 国产在线一二三| 欧洲黄色片视频| 人妻精品久久无码专区涩涩| 亚洲成人激情社区| 激情a影院| 涩涩涩久久| 欧美在线观看网址| 国产欧美一区二区三区在线看| 精品一区二区三区国产| 精品国产情侣高潮露脸在线| 丁香激情综合久久伊人久久| 国产a免费视频| 亚洲久色视频| av最新版天堂资源在线| 天天色综合影视| 亚色国产| 成人动漫av在线| 亚洲中文字幕无码天然素人| 精品丝袜一区二区三区| 毛片无限看| av免费网站| 久久97超碰人人澡人人爱| 成人在线视频精品| 欧美 视频 一区| 国产视频在线播放| 伊人久久五月天| 国产女人成人精品a区| 精品视频91| 九九重口味电影| 白嫩情侣偷拍呻吟刺激| 国产偷久久久精品专区老女人| 欧美xxxxx性xxxx生活| 国产精品国产免费无码专区不卡| 中国字幕a在线看韩国电影| 67194亚洲| 欧美日韩一区二区三区四区五区六区| 亚洲视频一二三四| 精品一区二区视频在线| 午夜激情hd| 久草精品在线观看| 国产精品成人午夜久久| 免费看h网站| 日韩av中文在线观看| 青青热在线精品视频免费观看| 国产午夜亚洲精品区| 久久久成人精品视频| 国产成人在线电影| 久久精品国产精品亚洲色婷婷| 欧美黄a| 中文一区二区视频| 国产偷窥真人视频在线观看 | 亚洲清纯唯美| 黄色av动漫| av网址推荐| 亚洲欧美另类动漫| 欧美一二区视频| 黄色免费国产视频| 国产亚洲精品久久777777| 二区三区四区| 啪啪网站免费看| 波多野的理伦片免费播放| 这里只有精品在线视频观看| 深夜18+网站在线观看| 无码av中文一区二区三区桃花岛 | 日韩在线观看av| 性做久久久久久久| 伊人久久大香线蕉av不卡| 你懂的在线观看网址| 亚洲免费av一区| 国产网红主播一区二区三区| 免费观看日韩av| 久久刺激视频| 在线亚洲激情| 国产妇女馒头高清泬20p多| 96视频免费观看| 中文字幕不卡乱偷在线观看| 天天操欧美| 成人a免费视频| 成人免费看片载| 天天做天天爱天天要天天 | 2021最新在线精品国自产拍视频| 99黄视频| 亚洲日本在线看片| 免费人成再在线观看视频 | 国产精品毛片一区二区在线看| 黄色在线免费看| 华人免费看黄网站| 日韩 二区| 人妻无码一区二区三区 tv| 色偷偷青青草| 深夜精品视频| av影音在线观看| 久久精品三级| 97久久精品人人做人人爽50路| 国产清纯白嫩初高中在线观看性色| 情趣色图免费在线| 欧美国产日韩一区二区三区| 免费毛片视频网站| 国产精品7777| 在线观看一区| 97人人超人人超免费国产| 亚洲第一视频在线播放| 亚洲 欧美 国产 日韩 精品| 日本乱码高清不卡字幕| 国产在线超清日本一本| 动漫美女无遮挡网站| 欧美视频在线观看网站| 中文字幕视频网| aaa毛片视频| 天天撸日日夜夜| a级a做爰片成人毛片入口| 歪歪漫画动漫视频高清在线| av在线免费国产| 中文字幕日韩女同一区二区三区 | 亚洲熟少妇在线播放999| 69激情网| 色综合色狠狠天天综合网| 极品少妇被啪到呻吟喷水| 动漫高h纯肉无码视频在线观看| 亚洲欧洲无码av电影在线观看| 国产成人精品人人2020视频| 黄色短片免费看| 99这里精品| 成人毛片18女人毛片免费| 午夜精品中文字幕| 国产91天堂素人系列在线播放| 天天干夜夜躁| 欧美 亚洲 丝袜 清纯 中文| 91精品国产色综合久久久浪潮 | 无码人妻一区二区三区免费看成人 | 香草乱码一二三四区别| 亚洲欧美不卡高清在线观看| 久草中文在线| 又粗又黄又硬又爽的免费视频 | 三级黄色大片网站| 精品人伦一区二区三区四区蜜桃牛 | 免免费国产aaaaa片| 国产91精品久久久久久| 天天爽综合网| 国产在线第三页| 一本一道久久久a久久久精品91| 1024国产看片| 免费一区二区三区视频在线| 亚洲一区 日韩精品 中文字幕| 久久爱9191| 久久亚州综合| 激情视频免费| 啪啪污视频| 国产三级a毛视频在线观看| 永久免费毛片在线观看| 日韩av在线影视| 亚洲国产精品久久久天堂不卡海量| 性夜影院午夜看片| 夜夜狂射影院欧美极品| 亚洲精品一区二区三区大桥未久| 真人做人试看60分钟免费视频| 日日操狠狠操| 特黄av| 国精产品一区一区三区有限在线| 国产三及片网站| av亚洲精华国产精华精| 久久精品国产精品亚洲艾草网| 五月激情四射婷婷| 中文日韩欧美| 精品国精品国产尤物美女| 日本色中色| 欧美亚洲国产日韩| 中国熟妇牲交视频| 亚洲人成色77777在线观看| 色婷婷综合激情综在线播放 | 欧美丝袜丝交足nylons| 黑人与亚洲人色ⅹvideos| 男生和女生一起相差差差| 亚洲激情中文| 推油少妇久久99久久99久久| 男人的天堂在线免费视频| 黄色www在线观看| 欧美在线另类| 久久黄网站| 国产精品制服| 国产精品视频一区二区在线观看| 亚洲综合在线另类色区奇米| 天天插伊人| 国产精品igao视频网网址3d| 色老头一区二区三区| 国产男女免费视频| 狠操网| 色婷婷成人| 日韩一区二区a片免费观看| 免费人成视频x8x8入口app| 国产无遮挡又黄又爽高潮| 高h猛烈失禁潮喷无码视频| 在线看片国产日韩欧美亚洲| 在线观看av网站永久| 欧美视频在线视频| 亚洲精品国产剧情久久9191| 99久久99久久加热有精品| 日本在线www| 菠萝蜜视频在线观看入口| 成人免费一区二区| 国产香蕉视频在线观看| 日韩第一色| 国产一级黄色影片| 精品成人一区| 欧洲美女熟乱av| 亚洲 欧美 中文字幕| 精品一区二区三区免费毛片| 九色综合九色综合色鬼| 97超碰资源| 自拍 亚洲 欧美 卡通 另类| 在线免费观看黄色| 六十路精品视频| 人人爽久久涩噜噜噜红粉| 欧美1区视频| 久久久久久久免费看| 99久久无色码中文字幕人妻蜜柚| av网站大全在线看| a天堂资源在线观看| 老熟女重囗味hdxx69| 国产亚洲成aⅴ人片在线观看麻豆| 牛牛影视一区二区三区免费看| 亚洲国产精品久久久久久6q| 日本欧美小视频| 亚洲精品自拍视频在线观看| 精品亚洲成在人线av无码| 欧美图区一区| 粉嫩在线一区二区懂色| 日韩午夜理论中文字幕毛片| 天堂中文字幕在线| 少妇精品一区二区免费视频| 麻豆精品久久久| 99成人在线| 色小姐在线| 人妻一本久道久久综合久久鬼色| 奇米影视444| 日韩国产精品91| 久久天堂视频| 婷婷黄色网| 日韩成人激情| 污网站在线免费观看| 国产全国探花系列| 99热自拍| 成人女人毛片| 精品福利一区| 91插插插插插| 亚洲女人性视频| 图片区 小说区 校园 另类| 亚洲 激情 自拍| 天堂av网站| 在线看欧美| 校园春色 亚洲色图| 久久国产直播| 久久zyz资源站无码中文动漫| 日欧美视频| 人人爽人人做| 亚洲影院久久| 日本高清在线观看视频| 久久中文一区二区| 日韩去日本高清在线| 91插插插插插插插插| 欧美色图中文字幕| 国产成人无码a区在线观看视频免费| 大片在线观看中文字幕| 看片地址| 大长腿白丝校花被c到高潮91| 五月婷婷视频在线| 日韩av无卡无码午夜观看| 97超碰人人澡人人爱| 日本欧美一级| 亚洲精品午夜精品| 三级黄色片| 国产揉捏爆乳巨胸挤奶视频 | 四虎影视成人| 91桃色视频| 无码人中文字幕| 超碰97人人在线| 亚洲人成色在线观看| 亚洲午夜久久| 欧美另类交在线观看| 国产精品涩涩涩视频网站| 亚洲欧洲免费| 国内极度色诱视频网站| 国产精品酒店| 日韩一级片一区二区| 欧洲亚洲色视频综合在线| 91亚洲精华国产精华| 免费羞羞视频无遮挡噼啪男男| 中文字幕高清| 亚洲综合激情视频| 伊人久综合| 亚洲精品视频观看| 老色鬼福利网站| 少妇被粗大的猛烈进出视频| www.com午夜| 久久b| 最新中文字幕av无码专区| 18处破外女出血在线| 亲嘴脱内衣扒胸摸下奶水| 一本一道久久a久久精品综合 | 美女诱惑久久| 成人免费网站入口www| 亚洲va男人天堂| 天堂网www在线资源网| 成人午夜免费福利| 亚洲瑟瑟在线| 日本高清无卡码一区二区久久| 色老头一区二区三区| 伊人国产一区| 色老大网址导航| 黄色污污网站| 欧美黄视频| 亚洲精品一二三四五区| 三人交性视频免费| 欧美一级特黄a| 性色tv| 一区二区中文视频| 亚洲最大色中文社区| 天天综合网在线| 国产一区二区三四区| 高跟鞋交shoeplay欧美| 成人爱爱视频网站| 日日草av| 亚洲一区二区3| av撸撸在线观看| 久久 亚洲 欧美| 少妇做爰免费理伦电影| 最近最新中文字幕高清免费| uuu833在线看片爽妇网| 黄色高潮视频| 久久www免费人成看片美女图| 欧美极品少妇xxxx亚洲精品| 国产伦精品一区二区三区高清版| 欧美污污视频| 中文字幕人妻丝袜二区| 亚洲国产精品午夜久久久| 男人天堂中文字幕| 无码欧美黑人xxx一区二区三区| 性色av一二三区| 精品亚洲网| 日本特黄aaaaaa大片| 裸模一区二区三区免费| 精品国产aⅴ无码一区二区| 日本黄色免费观看视频| 亚洲精品四区| 欧美黑人疯狂性受xxxxx喷水| 激情av网上观看| 在线看片免费人成视频影院看| 五月99久久婷婷国产综合亚洲| 免费毛片在线播放免费| 中文字幕第一区二区| 韩国日本中文字幕| jvid一区二区三区| 女人19水真多免费毛片| 成人片免费视频| 成 人 网 站国产免费观看 | 国产一级黄| 婷婷激情四射五月天| 色综合干| 99在线观看免费| 男生操女生视频在线观看| 国产成人久久综合第一区| 蜜桃视频在线观看一区二区| www.av视频在线观看| 日韩一区二区免费看| 成人网站在线进入爽爽爽| 性猛交ⅹxxx富婆视频| 国一产一性一乱一性一乱一视频| 狠狠cao2020高清视频| 最新国产精品无码| 国产末成年av在线播放| 成人免费网www黄| 亚洲精品视频免费在线观看| 久久久综合网| 精品久久久无码中字| 天天久久综合| 天天免费啪| 免费三色电费2024| 欧美区日韩区| 久久精品资源| 国产偷窥网| 欧美精品入口| 黄网站在线赏爱网| 午夜伦理片福利在免费观看| 女人脱下裤子让男人捅| 看国产到性色| 国产成人精品男人的天堂| 欧美高清不卡视频| 亚洲一区二区三区波多野结衣| 亚洲综合第三页| 亚洲v欧美v日韩v国产v| 欧美肥胖老妇bbw| 国产又色又爽又黄好看视频| 日韩国产在线看| 狠狠干成人| 国产做受视频在线观看| jizz一区二区三区| av成人国产| 中年人妻丰满av无码久久不卡| 成年在线网站免费观看无广告| 一区二区在线免费播放| 国产真人无码作爱免费视频app| 综合久久狠狠| 成人亚洲欧美一区二区三区| 一二三区在线观看| 亚洲国产观看| 色妞网在线观看| 丁香久久婷婷| 精品婷婷伊人一区三区三| 亚洲精品偷拍视频| 国产 精品 美女| 最新免费av网站| 国外av网站| 嫩草研究院久久久精品| 免费无遮挡无码永久视频| 欧美精品一区二区三区蜜臀| 国产精品67人妻无码久久| 亚洲欧美另类在线图片区| 97欧美精品系列一区二区| 韩国理伦片一区二区三区在线播放| 91色中文字幕| 色内内在线观看| 韩国午夜福利片在线观看| 男人女人黄 色视频免费| 人妻av中文字幕无码专区| av动漫网| 中文字幕人成乱码熟女香港| 成人黄色国产| 全肉野战高h含苞时夏时霖| 国产精品传媒一区二区| 国产精品香蕉| 中文字幕成人动漫| 乱人伦中文无码视频在线观看| 2020精品国产午夜福利在线观看| 麻豆一精品传媒卡一卡二传媒短视频| 亚洲人色| 国产免费学生| 裸体的日本在线观看| 男人操女人视频免费看| 欧美日韩在线观看一区二区三区| 中文字字幕国产精品| 一本一道波多野结衣一区二区| 欧美综合色区| 啪啪全程无遮挡| 日韩av中文字幕一区二区| 不卡av手机在线观看| 黑鬼大战白妞高潮喷白浆| 狠狠操狠狠色综合网| 亚洲精品亚洲人成在线| 亚洲国产一区av| 神马一区| 天天槽夜夜槽| 三级国产视频| 日韩精品极品在线观看播放免费视频| 久久久91精品| 天堂视频在线观看高清| 日韩精品xxx| 免费狂野欧美性猛交xxxx| 日韩福利视频网| 天天想夜夜操| 国产喷水视频| 在线观看国产亚洲视频免费| 国产农村妇女精品一区二区| 少妇饥渴xxhd麻豆xxhd骆驼| 日韩av动漫| 国产成人精品白浆久久69| 四虎成人在线观看| 少妇久久人人爽人人爽人人片欧美| 欧美另类一区二区| 草久在线观看| 国产欧美另类精品久久久| 91在线免费看网站| 日韩 欧美 自拍| 看电影就来5566av视频在线播放| 免费看污网址| 国产视频1区| 日韩欧美综合| 午夜尤物18| 影音先锋亚洲天堂| 久久九九国产精品怡红院| 亚洲精品一区二区中文字幕| 亚洲欧美激情综合| 在线观看国产免费视频| 欧美亚洲网| 法国啄木乌av片在线播放| 国产成人永久免费视频网站| 成人3d动漫一区二区三区| 国产福利中文字幕| 久久狠狠高潮亚洲精品| 西西444www无码大胆| 黄的网站在线观看| 免费看黄网站在线看| 亚洲四播房| 成年人免费在线看视频| 免费一级大片| 99热在线精品播放| 亚洲中文成人中文字幕| 377p欧洲日本亚洲大胆| 99热这里都是精品| 欧美抠逼视频| 国产在线精品不卡| 久久久性高潮| 日韩成人在线看| 国产三及片网站| 精品不卡视频| 亚洲国产精品国自产拍av绿帽子| 自拍偷自拍亚洲精品偷一| 懂色av一区二区三区免费观看| 国产精品成人一区二区| 91免费在线视频网站| 午夜婷婷精品午夜无码a片影院| 伊人网在线免费视频| 久热这里只精品99国产6-99re视…| 国产综合视频在线播放| 欧美日韩一区二区电影| 亚洲成在人| 国产亚洲区| 2021国产精品国产精华| 肥臀熟女一区二区三区| 国产日产久久欧美清爽| 亚洲三级黄| 欧美,日韩,国产在线| 青青草在线视频免费观看| 搞黄视频在线免费观看| 在线 亚洲 国产 欧美| 欧美丰满一区二区免费视频| 亚洲品质自拍| 99免在线观看免费视频高清| 色愁愁久久| 91在线你懂的| 丁香六月av| 免费网站内射红桃视频| 成人免费看片载| p色视频免费在线观看| 91在线视频免费观看| 国模冰莲极品自慰人体| 麻豆自拍偷拍视频| 欧美视频在线视频| 国产91精品视频在线观看| 中文字幕乱码亚洲无线码按摩| 日本高清视色| 美女大量吞精在线观看456| 精品无人国产偷自产在线| 国产精品视频yy9299一区| 亚洲天堂2021av| 欧美大片a级毛片| 日韩经典视频| 日本三级日产三级国产三级| 成人自拍在线| 国产又粗又长又爽又黄的视频| 欧美囗交做爰视频| www日本色| 国产亚洲视频在线播放香蕉| 亚洲欧洲美洲在线综合| 成人夜色视频| 色视频在线观看免费视频| 色肉色伦交av色肉色伦| 久久久精品视频在线| 国产一区二区在线观| 亚洲综合 一区二区| 日韩在线观看成人| 日韩女优在线播放| 国产精品色综合精品福利在线| 99在线精品视频| 国产69久久久| 免费人成视频网站在线18| av动漫| 黄污在线看| 欧美日韩色婷婷| 亚洲精品无码成人a片蜜臀| 99黄视频| 国产久免费热视频在线观看| 日日摸日日碰夜夜爽无码| 青青久久av| 天天色啪| 在线视频免费一区二区| 精品国产精品网麻豆系列| 大番蕉尹人一线久久| 欧美日免费| 久视频精品线在线观看| 亚洲激情视频网| 日韩网站免费观看| 激情综合丁香五月| 美女啪啪自拍| 美女又爽又黄视频毛茸茸| 亚洲成人一区| 综合婷婷久久| 综合久久狠狠色成人网| 自拍偷拍图区| 在线观看日韩精品| 成人特级毛片www免费版| 777欧美| 中文在线资源观看视频网站免费不卡| 国产精彩视频在线观看| 久久国产精品萌白酱免费| 天堂六月婷婷| 日日躁天天躁| 99精品热6080yy久久日韩| 免费网站看sm调教视频| 国产精品人妻久久毛片| 97精品在线| av每日更新在线观看| 91香蕉国产免费| 国产欧美日韩亚州综合| 91日韩精品视频| 国产一级做a爱片在线看免| 欧美色综合免费| 国产乱码精品一区三上| 91深夜视频| 男女做爰猛烈啪啪吃奶动床戏麻豆 | 日本在线观看www| 51精品国产人成在线观看| 欧美亚洲日本国产综合在线| 激情婷婷欧美| 草莓视频在线观看成年| 久久精品国产亚洲欧美成人| 国产在线精品一区在线观看麻豆| 久久久久久久高清| 国产精品99久久| 欧美第一视频| 日本高清视频免费看| 欧美 国产 日产 韩国 在线| 婷婷色在线播放| 激情777| 亚洲精品岛国片在线观看| 午夜激情看片| 日本高清不卡码| 久久久免费毛片| 不卡毛片在线看| 精品国产福利一区二区| 黑人巨大精品欧美一区二区奶水| 羞羞网站在线观看| 国产三级农村妇女在线| 国产伦精品一区二区| 国偷自拍第113页| 福利在线免费观看| a毛片视频| 九九电影网av| 欧美三日本三级少妇99| 在线亚洲福利| 色诱惑直播在线观看| 动漫人妻h无码中文字幕| 99久久久无码国产精品| 耽肉高h喷汁呻吟总受np| 丁香婷五月| 大毛片| 天堂av在线一区| 性无码专区一色吊丝中文字幕| 美女视频一区在线观看| 久久99久久久欧美国产| 国产精品视频在线观看免费| 成人做爰100部片免费下载| 午夜三级电影网| 亚洲特黄一级大片| 久久米奇亚洲| 日本乱子伦配bbw| 日韩av不卡在线| 在线视频一区二区三区| 中文日产幕无线码一二| 欧美一级性视频| 天堂网av 在线| 成人黄色激情网| 久久久久久国产视频| 巨乳毛片| 午夜精品久久| 色又黄又爽| 在线成人免费观看www| av影片在线看| 四季av在线一区二区三区| 亚洲欧洲中文日韩乱码av| 国产亚洲精品久久yy50| 欧美最猛性xxxxx摘花| 天天操天天操天天操| 极品少妇一区| 欧美aⅴ在线| 亚洲精品激情| 午夜av在线免费| 午夜宅男在线| 亚洲午夜精品毛片成人播放器| 精品一区二区三区免费看| 女性私密整形视频| 视频黄色免费| 国产精品美女一区二区| 欧美男生操女生| 日韩特黄毛片| 不卡影院一区二区| 亚欧在线免费观看| 天天看视频| 狠狠色丁香婷婷综合久久小说| 交换av| 日韩大片在线观看视频| 老湿机国产福利视频| 玖玖色在线视频| 午夜啪啪网站| 嫩草伊人久久| 天天拍夜夜添久久精品大| 久久99这里只有精品| 手机成人在线| 九九久视频| 国模精品视频| 七妹在线a导航| 顶级欧美色妇4khd| 亚洲蜜桃精久久久久久久久久久久| 美女脱衣服一干二净| 色视频免费在线观看| 久色一区| 免费的av毛片| 国产亚洲精品久| 国产精品igao为爱做激情| 野花社区视频www官网| 亚洲天堂男人| 17草在线| 久久亚洲2019中文字幕| 欧美成人免费一级| av无码一区二区大桥未久| 91啪在线观看| 成人91视频| 中文字幕在线视频网| 欧美日韩片| 日本精品少妇一区二区三区| 超碰九色| 亚洲综合小说专区图片| 精品国产欧美一区二区三区成人| 亚洲欧美中文日韩v在线观看不卡| 中文字幕韩日| 日韩一级免费| 91久久久精品国产一区二区蜜臀| 波多野结av在线无码中文 | 九九久久精品国产av片国产| 99超碰麻豆| 日本成人网在线| 国产成人自拍偷拍| 国产国产小嫩模无套内谢| 欧美乱人伦| 久久久精品影院| 亚洲成av人片在线观看无线| 国产精品亚洲lv粉色| 久久天天躁狠狠躁夜夜不卡公司| 91在线超碰| 亚洲人成网站18禁止无码| 92久久精品一区二区| 亚洲一区视频在线观看视频| 天堂网www在线资源中文| 亚洲另类丝袜综合网| 男男视频亚洲欧美| av在线导航国产| 加勒比色老久久综合网| 国内毛片毛片毛片毛片毛片| 国内2020揄拍人妻在线视频| 亚洲精品国产一区二区三区在线观看| 天天拍久久| 亚洲精品动漫免费二区| 国产99久久久欧美黑人| 深爱五月综合网| 好大好深好猛好爽视频免费| 国产成人精品免费看在线播放| 手机看片久久| 尤物一区| 丝袜诱惑亚洲看片| 内射人妻少妇无码一本一道| 免费看污又色又爽又黄| 人人干在线观看| 欧美三级 欧美一级| 免费性色视频| 国产精品欧美亚洲777777| 日本网站免费在线观看| 男女精品久久| 国产手机av在线| 欧美日韩午夜影院| 午夜免费男女aaaa片| 久久久久久久久久91| 国产成人av无码永久免费| 韩国国内大量揄拍精品视频| 午夜精品久久久久久久四虎| 北条麻妃av在线| 亚洲一区视频免费观看| 探花国产在线| 能播放的毛片| 黄网站色视频免费直播| 无码ol丝袜高跟秘书在线观看|