婷婷六月丁香激情I亚洲成人av片在线观看I97精品国产91久久久久久I欧美日韩国产页I国产99一区I黄色动态图xxI最新国产精品视频

得物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。

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

標簽:

推薦

財富更多》

動態更多》

熱點

主站蜘蛛池模板: 五月天国产在线| 污污又黄又爽免费的网站| 亚洲免费观看在线视频| 久久人妻国产精品31| 亚洲成年人在线观看| 国产精品亚洲a| 国自产偷精品不卡在线| 日韩视频123| 在线观看免费版| 久久久成人999亚洲区美女| 国产成人黄色av| 东京热男人av天堂| 日日摸夜夜骑| 国产免费h片av| 午夜爽爽爽羞羞视频影院| 九色porny视频国产网曝| 午夜伦理福利视频| 成人精品视频一区二区| 一区二区福利| mm131爽爽爽亚洲精品| 亚洲一区二区三区尿失禁| 日本男女网站| 91精品国产综合久久香蕉922| 最新欧美精品一区二区三区| 国产成人欧美一区二区三区的| 六月国产盗摄女厕嘘嘘大神级| 亚洲骚综合| 日本污视频在线观看| 久久日本视频| 成年人在线播放| 老司机精品福利视频| 色综合天天色综合久久网 | 国模雨婷捆绑高清在线| 日韩综合在线视频| 午夜一区二区亚洲福利vr| 欧美入口| 欧美天天黄| 久久精品亚洲一区二区三区观看模式| 国产伦精品一区二区三区视频孕妇| 四虎地址8848| 淫语在线观看| 午夜无码区在线观看| 久久久久久久成人| 人人妻人人添人人爽欧美一区| 黄网亚洲| 久久久久久久久毛片| 伊人久久大香线蕉综合5g| 国产美女免费| 亚洲毛片儿| 欧美极品中文字幕| 老熟女hdxx老小配| 日韩在线高清免费视频| 樱花草www在线| 亚洲午夜精品久久久中文影院| 可以免费观看的av毛片下载| 天堂精品在线| av片在线观看| 欧美一级理论| 亚洲系列另类av| 日韩a在线| 老熟女激烈的高潮| 特黄特黄欧美亚高清二区片| 欧美日韩一级二级| 操啪啪| av色人阁| 扒开女人下面使劲桶| 99一级片| 野花社区在线www日本| 亚洲wwww| www.亚洲日本| 国产第一亚洲| 国产又粗又黄视频| 日日噜噜噜夜夜爽亚洲精品| 综合 婷婷| 国产亚洲精品久久久久久入口| 麻豆亚洲国产成人精品无码区| 中文字幕永久免费| 特黄特色特刺激免费播放| gogo专业国模私拍大尺度| 超碰人人舔| 国产精品入口麻豆原神| 国产成人精品无码一区二区三区| 国产任我爽在线视频| 不卡av在线网| 人人澡人人看| 国产亚洲精品久久久玫瑰| 91av免费| 激情第一区仑乱| 久久青草网站| 无码高潮少妇毛多水多水免费| 99c视频高清免费观看| 五月婷婷综| 国产999免费视频| 香蕉视频最新网址| 日系tickle美女全身vk| 中文字幕在线人| 92精品视频| 欧美成人免费在线观看视频| 日日噜噜夜夜狠狠va视频| 五月精品| 国产精品免费观看网站| 超碰在线网址| 精品超薄肉色丝袜足| 黄色国产在线观看| aaa免费看大片| 99r在线视频| 久久大胆| 欧美拍拍视频| 日韩视频在线观看免费视频| 一级做a免费视频| 免费看污片的网站| 久久草在线观看视频| 青青草91视频| 欧美激情做真爱牲交视频| 风韵犹存妇人69国产| 色综合91久久精品中文字幕| 一区二区视频在线播放| 3p男女帐篷户外| www久久九| 81国产精品久久久久久久久久| 久久久av水蜜桃| 激情97| 一本—道久久a久久精品蜜桃| 国产精品福利自产拍久久| 性国产xxxx乳高跟| www.色网| 精品亚洲午夜久久久久91| 日韩色图区| 亚洲欧美日韩一区二区| 欧美日韩爱爱视频| 日本少妇被黑人猛cao| 日韩毛片在线看| 国产亚洲视频在线观看播放| v天堂福利视频在线观看| 成人免费看www网址入口| 硅胶做爰视频www在线观看| 国产.高清,露脸,对白| 国产免费久久精品国产传媒| 韩国主播18vip免费视频| 美女胸又黄又禁| 黄又色又污又爽又高潮| 黄色三级视频片| 操一操av| 神马久久网站| 精品久久久久久综合日本欧美 | 性一交一乱一伦a片| 黄色拍拍视频| 动漫美女舌吻| 91精品国产二区在线看大桥未久| 色老头资源网| 国产在线精品免费| 午夜精选网站| 台湾综合色| 女人洗澡一级特黄毛片| av久草| 日日日日影院| 国产高清不卡无码视频| 黄色片成年人| 成人无码视频| 亚洲黄色片网站| av在线男人天堂| 日本成人免费观看视频| 韩国成人毛片| 激情综合色播激情啊| 成人在线观看一区| 国产精品美女免费| 国产伦乱| 日本欧美一级片| 成人在线国产视频| 入禽太深免费视频欧美| 国产伦精品一区二区三区视频无| 中文字幕另类小说| 日本精品午夜| 青青草原综合久久大伊人| 国产一区久久精品| 男女互插免费视频| 不卡在线视频| 国产又大又黄又猛| 黑人又粗又大xxx精品| 热re91久久精品国99热蜜臀 | 国产自产在线视频一区| 粉嫩aⅴ一区二区三区四区| 国内精品福利| 免费av一区二区三区| 香蕉午夜| 国产激情久久久久影院老熟女免费| 日本高清一区二区三| 久久综合丁香| 国产美女在线直播| 天堂va欧美ⅴa亚洲va在线| 久久精品国产精品| 国产精品视频免费| 性喷潮久久久久久久久| 国产不卡一| 91亚洲永久精品| 午夜精品久久久久久久99热额| 黑人激情av| 日韩高清电影免费| 亚洲国产成人久久| 狼人插视频在线观看| 91精品视频免费观看| 亚洲精品一区国产精品| 人人看人人澡人人玩人人爽| 美女爽到高潮91| 国产人伦精品一区二区三区| av国産精品毛片一区二区在线| 情侣作爱视频网站| 国产成人成网站在线播放青青| 青娱乐在线免费观看| 日韩aaa久久蜜桃av| 日韩激情文学| 亚洲女同av| 奇米影视第4色| 成人短视频在线观看| 日本一区二区精品| 丁香激情综合久久伊人久久| 太平公主秘史在线观看| 亚洲第五色综合网| 久久综合久久色| 丰满亚洲少妇av| 免费国产羞羞网站美图| 九九久久网| 伊人久久大香线蕉影院| 男ji大巴进入女人的视频| 国产精品无码mv在线观看| 男女交性视频播放| 又大又粗又爽18禁免费看| av免费在线播放亚洲| 伊人网大| 亚洲午夜精品久久久久久| 日韩欧美一级在线播放| 4444亚洲人成无码网在线观看| 精品无码乱码av| 最近久乱中文字幕| 四虎影院在线免费观看视频| 日韩中文字幕精品一区| 高清精品一区二区| 国产精品久久久午夜| www.五月激情| 一区二区www| 黑白丝美女国产| 91尤物国产网红尤物福利图片| 亚洲国产成人久久一区| 亚洲图片校园另激情类小说| 久久久久免费| 日本天堂免费a| 免费av中文高清| 欧美日韩国产综合色视频一区二区| 国产专区欧美| 亚欧在线免费观看| 久章草国语自产拍在线观看 | 成人免费在线观看av| 在线观看福利网址| 国产999精品2卡3卡4卡| 色综久久| 国产美女网| 精品熟女碰碰人人a久久| 五月综合色婷婷在线观看| 新婚少妇紧窄白嫩av| 99热在线国产精品| 国产精品毛片久久蜜| 免播放器在线观看av| 欧美伦费免费全部午夜最新| 欧洲亚洲色一区二区色99| 免费观看添你到高潮视频 | 欧美色视频在线观看| 国产精品丝袜亚洲熟女| 中文字幕人成无码人妻综合社区| 久久国产欧美精品| 爱爱网站在线| 国产日韩大片| 国内自拍2020| 精品国产人妻一区二区三区免费| 亚洲精品一区二区三区在线| 天天综合av| 日韩av在线天堂| 成人影音av| 毛片网| 狠狠色狠狠色综合伊人| 91捆绑91紧缚调教91| 午夜影院免费视频| 色婷婷精品| 午夜tv| 欧美久色视频| 欧美精品亚州精品| 91福利视频久久久久| 日本麻豆一区二区三区视频| 国产侵犯亲女三级| 天堂在线视频免费观看| 怡红院一区二区| 伊人福利网| 超碰在线播放91| 久久久久久久久久国产精品| 在线三级网| 久久艹91| 亚洲一区国产一区| av在线播放日韩亚洲欧我不卡| 狠狠五月| 亚洲国产一区二区av| 性欧美亚洲xxxx乳在线观看| 久久人人爽av亚洲精品天堂| 欧美va天堂va视频va在线| 国产69精品久久久久久| 欧美妇人zzzzo00xxxx| 福利视频三区| 超级av在线天堂东京热| 欧美三人交| 91免费视频免费版| 天天干天天摸| 国产熟妇勾子乱视频| 国产精品视频永久免费播放| 光棍天堂av| 国产99久久久欧美黑人刘玥| 成人免费小视频| 激情.com| 国产黄视频在线观看| 精品久久中文| 意大利性荡欲xxxxxx| 欧美特黄在线| 18禁黄网站禁片免费观看女女| 色婷婷综合在线观看| 三级网站在线| 插插插精品亚洲一区| 亚洲香蕉视频综合在线| 中文字幕在线观看完整| 久久免费一级片| 亚洲欧美日韩免费| 国产 在线 日韩| 免费在线成人av| 欧美日韩一区在线观看视频| 性高朝久久久久久久久久| 国产免费又爽又色又粗视频| 五月激情视频| 黄瓜视频成年污| 久久这里只有精品9| 变态黄色软件| 亚洲成a人一区二区三区| 色8久久精品久久久久久蜜| 国产精品91久久| 欧美亚洲国产一区| 国产日韩欧美夫妻视频在线观看| 手机看黄av免费网址| 内射合集对白在线| 欧美精品 在线视频| 日本线视频www| 狠狠婷婷色五月中文字幕| 日韩资源网| 国产精品日韩高清伦字幕搜索 | 成人av高清| 女人天天干夜夜爽视频| 日韩国产一区| 奇米第四色首页| 91在线免费播放视频| 国产精品久久嫩一区二区免费 | 欧美高清视频在线观看| 国产三级黄视频| 日本小视频在线免费观看| 又黄又高潮的视频| www..com毛片| 成年女人爽到高潮喷视频| 日本二三视频| 蜜臀国产在线| 国产成人精品自在钱拍| 成人免费精品网站| 97超级碰碰碰久久久| 999在线视频精品免费播放观看| 色一炮在线观看| 99国产精品人妻噜啊噜| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 内射女校花一区二区三区| 天干夜啦天干天干国产免费| 在线成人免费网站| 性暴力欧美猛交在线播放| 精品系列无码一区二区三区| 久久久女女女女999久久| 中日韩男男gay无套| 国产免费一区二区三区在线网站 | 老色鬼在线精品视频| 性史性农村dvd毛片| 伊人激情在线| 香港三级午夜理伦三级| 亚洲男人天堂2021| 国产色男浴室洗澡gay2022| 免费观看黄色网页| 中文字幕成人精品久久不卡| 午夜小视频在线观看| 777久久婷婷成人综合色| 国产精品亚洲精品日韩己满十八小| 国产老妇伦国产熟女老妇视频| 成人久久18免费网站图片| 麻豆自媒体 一区 二区| 国产四区在线| 巨乳美女穿比基尼| 久久国产人妻一区二区免费| av福利在线观| 久久成人精品视频| 九九视频在线观看视频6| 欧美区在线观看| 亚洲美女成人网| 99精品国产一区二区青青牛奶| 精品夜夜爽欧美毛片视频| 人人澡人一摸人人添| 国产精品白嫩美女在线观看| 日韩超级毛片| 欧美xxxxx精品| 国产毛片口爆视频在线| 高清免费毛片| 色久天堂| 国产精品网站在线观看| 国产精品天干在线观看| 97涩涩影音先锋| av色婷婷在线| 亚洲v欧美| 情侣黄网站大全免费看| 欧美午夜在线一二页| 久久精品成人一区二区三区| 成人无码精品一区二区三区| 美女张开腿扒开尿口| 自拍视频一区二区| 少妇av免费| 337p大尺度啪啪人体午夜| 亚洲女同2| 亚洲欧美国产精品桃花| 欧美色88| 91国内视频| 欧洲熟妇乱xxxxx大屁股7| 国产精品男人爽免费视频1| 欧美美女一区二区三区| 精品区一区二区三| av亚洲一区二区三区| 成人小视频免费看| 成人丁香婷婷| 无限资源日本好片| 成人免费观看高清| 国产综合av一区二区三区无码| 欧美69av| 台湾佬中文娱乐22vvvv| 中文字幕国产高清| 日韩av一本| 四虎导航| 天天亚洲| 操片免费看| 国产一区二区三区国产| 人人干97| 日韩一二在线| 9九色桋品熟女内射| 欧美不卡无线在线一二三区观| 精精国产xxxx视频在线动漫| 亚洲精品mv| 欧美激情综合色综合啪啪五月| 午夜内射高潮视频| 欧美高清国产| 欧美一区二区三区成人片在线| 欧美成ee人免费视频| 日韩综合第一页| 亚洲字幕成人中文在线电影网| 国产无遮挡免费视频| 国产无限资源在线观看| 在线观看亚洲精品视频| 欧美日韩巨乳| 99热| 中文字幕韩国三级理论无码| 99热综合| 裸身视频网站| 国产成人午夜精华液| 伊人综合视频| 欧美区在线观看| 丰满奶水二区三区在线| 领导揉我胸亲奶揉下面| 久久久精品视频免费看| 色94色欧美sute亚洲线路一ni| 色妞妞av| 欧美熟妇毛茸茸| 亚洲无线码一区二区三区| 明里柚在线| 777奇米888色狠狠俺也去| 日本欧洲亚洲高清在线| 欧美孕妇孕交极品| 国产日韩欧美一区二区三区综合| 午夜毛片不卡免费观看视频| 精品伊人久久久大香线蕉天堂 | 无码精品a∨在线观看| 国产伊人av| 午夜久久久影院| 国产chinese精品露脸| 伊人情人综合网| 成人www视频| 福利午夜网站| 狠狠躁夜夜躁人人躁婷婷| 91免费精品| 无人在线观看的免费高清视频| 免费男性肉肉影院| 色综合久久久久| 手机在线中文字幕| 福利在线观看| 妞干网在线视频观看| 国产精品99导航| 久久九精品| 国产精品捆绑调教网站| 久久橹| 动漫美女被狂揉大胸羞羞网站| 久99国产精品人妻aⅴ| 国产剧情在线观看一区二区| 婷婷色怡春院| 国产亚洲精品一区二区| 色老头福利视频| 神马久久资源| 可以在线看的av| 中文字幕中文字幕77| 国产精品久久久久久久久久免费看 | 老熟妇仑乱视频一区二区| 女仆av观看一区| av中文字幕在线一区| 国产91在线 | 美洲| 亚洲国产日韩在线人成蜜芽| 91精品国产99| 成人亚洲精品久久99狠狠| 无套熟女av呻吟在线观看| 日韩欧美黄色大片| 91情侣在线视频| 久久久av一区二区| 成人精品免费视频| 亚洲激情福利| 国产免费丝袜调教视频免费的| 免费欧美一区二区| 日韩久久久久久久久久| 无码av无码天堂资源网| 久久久久久免费免费精品软件| 在线视频免费一区二区| 激情99| 可以免费看av| 麻豆一区在线| 精品香蕉99久久久久网站| 67194熟妇在线永久免费观看| 素人视频在线观看免费| 欧美另类亚洲| 九九热视频精品在线观看| 无码内射中文字幕岛国片| 男人添女人下部高潮视频在线观看| 欧美日韩视频在线观看一区二区| 免费的很黄很污的视频| 国产特级黄色毛片| 日本国产极品诱惑| www.国产日本| 国产青青久久| 婷婷久久国产对白刺激五月99| 妇女性内射冈站hdwww000| 亚洲精品久久久一区二区图片| 男人边吃奶边揉好爽免费视频| 黄a在线观看| 瑟瑟视频网址| 国产精品100页| 欧美日韩在线观看精品| av一区和二区| 香港三级午夜理论三级| 黄色不卡av| 日韩大片在线观看视频| 国产aaa级片| 成人网在线| 免费无码又黄又爽又刺激| 9999在线观看| 少妇裸体淫交视频免费看高清| 色国产在线视频| 国产免费夫妻性生活| 蜜桃视频在线观看一区二区三区| 亚洲欧洲在线播放| 色屁屁xxxxⅹ在线视频| 色网站免费看| 成人公开免费视频| 久久久精品2020免费观看| 欧美一区二区日韩| 亚洲欧美日本综合| 好爽...又高潮了毛片| 狠狠操一下av| 国产1区2区3区中文字幕| 中文字幕在线国产| 最新中文字幕av| 日韩免费片| 精品国产凹凸成av人网站| 日本一级特黄录像视频播放| 亚洲区自拍| 热99精品视频| 亚洲成人av| 香港三日本三级少妇三99| 午夜av电影在线播放| 日韩在线中文字幕视频| 东方影库av在线播放| 福利免费观看午夜体检区| 久草免费福利资源站在线观看| 九九精品在线观看| 日本午夜视频在线观看免费| 日韩久久久久久久久久| 香港a级v级在线观看电影| 玖色av| 性免费网站| 九九热精品在线播放| 国产福利萌白酱在线观看视频 | 超薄丝袜足j好爽在线观看| 精品日本一区二区免费视频| 成人h视频在线观看播放| 色月婷婷| 天天看片天天爽| 欧美日韩午夜在线| 女人帮男人橹视频播放| 日本玖玖视频| 亚洲在线视频福利| 日韩精选| 亚洲另类交| 中文字幕日韩在线播放| 国产精品国产三级国产普通话| 国产成人精品午夜福利在线播放| 永久免费视频网站| 美女让男人捅| 国产裸体按摩视频| 日韩成人精品视频| 国产精品女人精品久久久天天| 99久久久国产精品免费99| 久久看人人爽人人| 欧美日韩一区二区三区四区在线观看 | 免费一级黄色毛片| 人人射影院| 日韩欧美精| 一区二区三区视频播放| 中文字幕色婷婷在线视频| 国产一区国产精品| 国内精品自线一区二区三区2021| 在线看黄色av| 欧美福利在线播放| 午夜国产伦理| 韩国成人福利片在线播放| 国产日韩欧美电影在线观看| 88av.com| av宅男在线影院| 国产露脸精品国产探| 亚洲高清免费在线观看| 黄色a网站| 一本大道久久东京热av| 欧美丰满熟妇bbbbbb百度| 久久久久国产精品人妻aⅴ网站| 美女搞黄在线观看| 欧美不卡在线观看| 亚洲精品成人久久久| 永久免费看黄| 国产无套内射又大又猛又粗又爽| 亚洲精品国产成人av| 中文字幕22页| 色久优优欧美色久优优| 桃色视屏| 成年网站在线免费观看| 最全av导航在线| 日一日干一干| 蜜臀avcom| www.亚洲一区二区三区| 任你躁久久久久久妇女av| 国产录像在线观看| 亚洲精品成av人片天堂无码 | 五十六十老熟女毛片| 久久久视屏| 大奶在线观看| 欧美激情综合五月色丁香| 美丽人妻系列无码专区| av宅男在线影院| 久久精品视频黄色| 91亚洲精品视频| 日本三级吃奶乳视频在线播放| 欧美综合网| 免费观看性欧美大片无片| 国产精品7m凸凹视频分类| 无码少妇精品一区二区免费动态| 日本激情视频在线| 日本中文不卡视频| 欧美狠狠插| 黄色大片久久| 国产无夜激无码av毛片| 久久久一二三| 日本网站在线播放| 91青青草| 国产偷v国产偷v亚洲高清| 国产91精品久久久久| 韩国v欧美v亚洲v日本v| 欧美日韩欧美| 一区二区三区激情视频| 国产97色在线 | 日韩| 91黄色国产| 天海翼精品久久中文字幕| 69久久精品无码一区二区| 3bmm在线观看视频免费| 女警察双腿大开呻吟| 特级夫妻大片免费有线播放| 美女扒开胸罩露出胸触手| 国产精品久久久久久久久久黑人| 亚洲精品乱码久久久久久写真| 久久久精品中文字幕| 在线看片你懂| 精品久久久久久久久久久下田| 999热在线视频| 欧美成人小视频| 99热国| 黄色在线免费播放| 岛国美女福利视频| 亚洲专区+欧美专区+自拍| 日韩在线视频在线| 免费在线观看毛片视频| av免费网| 黄色毛片在线观看| 黄色免费一级片| 国产精品免费视频xxxx| 日本免费不卡的一区视频| 伊人黄网| 日韩艹逼视频| 日本a黄| 久久综合给合久久狠狠狠97色69| 日韩有码在线电影| 美国黄色毛片一级| 免费特级片| 91色精品| 国产一卡三卡四卡无卡精品| aa国产精品| 中文字幕av免费| 欧美高清无遮挡| 日本黄色一级网站| 福利视频网页| 最新色站| 夜操| 亚洲一区二区三区乱码| 成人午夜在线播放| 欧美色亚洲色| 黄色网络在线观看| 午夜美女影院久| 日韩wwww| 久久久免费少妇高潮毛片| 色资源av中文无码先锋| 69精品在线| 一二三级毛片| 美女的乳房又黄又大又www| 天堂中文字幕免费一区| 最新av在线免费| 国产精品99久久精品| 色屁屁www影院免费观看| 久久天堂视频| 国产成人精品综合久久久久99| 中文字幕精品亚洲字幕资源网| 五月丁香六月狠狠爱综合| 午 夜欧美电影在线观看| 成人午夜一区| 大胸美女被调教视频| 亚洲色爱免费观看视频| 国产精品美女久久久久av爽| 欧美日韩一区二区三区在线免费观看| 国产女人高潮抽搐喷水免费视频| 午夜精品视频福利| 超碰狠狠干| 不卡伊人av在线播放| www欧美激情| 好吊视频一区二区| 亚洲免费自拍| 欧美日产国产精品日产| 精品女同一区二区三区在线观看| 婷婷狠狠久久久一本精品| 久久久久久久综合| 国精产品69永久中国有限| 国内盗摄视频一区二区三区| 三级黄色在线| 真人一及毛片| 欧美色呦呦| 色哟哟一区二区在线观看| 免费国产在线观看| 国产精品伦理| 欧美成人高潮一二区在线看| 欧美三级欧美成人高清www| 麻豆传媒av在线播放| www.成人精品| 国产又黄又大又粗的视频| 一级真人毛片| 国产精品99久久久久久有的能看 | 国产在线观看无码免费视频| 亚洲无吗天堂| 狠狠色亚洲| 亚洲一二三四2021不卡| 国产亚洲视频中文字幕97精品| 干干人人| 国产日韩欧美视频| 日本高清在线播放| 宅男噜噜噜66一区二区| 久久理伦片琪琪电影院 | 国产精品女教师久久二区二区| 66网站视频导航| 999在线| 日本脱了乳罩让男人吃奶| 亚洲色图99p| 亚洲国产无| 奇米色一区二区| 国产成人无码免费视频79| 国产成人精品一区二区秒拍| 九一黄色片| 在线观看免费视频| 日本不良视频| 国产成人精品日本亚洲专区61| 天天爽夜夜爱| 国产女主播喷水视频在线观看| 久久精品国产99国产精品导航| 碰天天操天天| 在线亚洲播放| 被cao的合不拢腿高h快穿 | 国产三级小视频| 亚洲色图 丝袜| 国产精品亚洲综合久久| 亚洲精品1区| 午夜天堂av| 韩国一区二区三区美女美女秀| 四虎海外永久| 免费视频99| 一本色道久久综合亚洲二区三区| 美女被c免费视频网站| ww欧洲ww在线视频看| 在线观看尤物视频| 91亚洲精品一区| 欧美 日韩 国产在线| 国产剧与子敌伦刺激对白播放| 嘿咻视频欧美日| 欧美激情bb| 国产日产精品_国产精品毛片| 国产精品丝袜综合区旗袍| 好吊妞视频这里有精品| a级毛片在线视频免费观看| 看欧美日韩国产| 久久和欧洲码一码二码三码| 自拍偷拍20p| 9色视频| 精品无码国产一区二区三区av| 亚洲成av人片一区二区| 超碰精品| 乱子伦国产对白在线播放| 精品九九人人做人人爱| 3p人妻少妇对白精彩视频| 99久久99这里只有免费费精品| 日本福利在线观看| 春色福利| av导航福利| 国语憿情少妇无码av| 国产一级二级三级视频| 黄色一级片久久| 狠狠操夜夜操| 日日夜夜操操操操| 狠狠干夜夜爽| 午夜大片一区| 中文视频在线播放| 淫视频在线观看| 女性喷液过免费视频| 国产亚洲毛片| 亚洲18色成人网站www| 在线观看无码av免费不卡软件| 嫩b人妻精品一区二区三区| 狠狠艹夜夜艹| 午夜国产精品成人| 夜夜躁狠狠躁日日躁2024| 精品久久久无码中文字幕天天| 色综合视频在线观看| 美乳美女在线观看香蕉| 快播电影网址老女人久久| 岛国无码av不卡一区二区 | 奇米色777欧美一区二区| av漫画网站在线观看| av网址在线观看免费| 日韩 综合| 国色综合| 蜜臀av一级做a爰片久久| 久久久久久亚洲欧洲| 18无码粉嫩小泬无套在线观看| 在线不卡日本| 精品无人乱码高清| 美女精品毛片| 性人久久| 无码人妻丰满熟妇奶水区码| 色网在线| 永久免费的av片在线电影网| 精品久久久久久18免费网站| 精品久久久久久亚洲综合网| 小宝贝真紧h军人h| 国产在线丝袜| 视频一区 视频二区 国产精品| 91欧美国产| 日本1区2区3区中文字幕| 吃奶揉捏奶头高潮视频| 日韩视频网址| 草久在线观看视频| 亚洲精品一二三区久久伦理中文| 东北少妇对白太大了| lutu成人福利在线观看| 激情欧美丁香| 乱色熟女综合一区二区三区| 亚洲男人天堂网站| 在线观看免费黄色| 免费理论片51人人看电影| 男女午夜激烈无遮挡| av大片网| 久久久久久久国产精品| 日本少妇自慰免费完整版| 超碰97免费观看| 亚洲 都市 校园 激情 另类| 精品国产av 无码一区二区三区| 天堂蜜桃一区二区三区| 18禁白丝喷水视频www视频| 福利小视频网站| 国内外成人激情免费视频| 精品久久久99大香线蕉| 亚洲色欲网熟女少妇| 青青草精品视频在线观看| 91麻豆精品国产91久久久使用方法| 日本特黄aaaaaa大片| 青青草精品视频在线| 激情片网站| 小色综合| 欧美日韩无套内射另类| 国产在线精品视频你懂的| 男人天堂av资源网| xxx在线播放| 欧美人视频| 国产视频二区三区| 欧美日韩在线精品一区二区三区激情| 视频 福利 在线| 色翁荡熄又大又硬又粗又视频| 国产午夜福利在线播放| 另类激情综合| 精品国产一区二区三区免费| 蜜臀在线播放| 丝袜美腿亚洲一区二区| 九九热这里只有在线精品视| 欧美日韩亚洲一二三| 人人看人人艹| 日韩午夜一区| 欧美性受xxxx黑人xyx性爽| 青青草国产精品亚洲| 日韩精品久久久免费观看| 亚洲欧洲小视频| 国产精品视频网站| 日韩欧精品无码视频无删节| 午夜福利试看120秒体验区| 麻豆一二三区精品蜜桃| 久草久草在线| 野花在线无码视频在线播放| 极品美女一级片| 免费日韩毛片| 精品日韩欧美| 久久久橹橹橹久久久久高清| 日韩av网站在线播放| 每日在线观看av| 丝袜无码一区二区三区| 日本免费网站看大片视频| av免费人人干| 日本高清视频一区二区| 黄色777| 久久久久国产精品人妻aⅴ免费| av 在线 导航| 七七成人网| 色久伊人| 美女毛片视频| 欧美夫妻生活视频a级| 色片av| 初尝情欲h名器av| 免费看久久| 高贵麻麻被调教成玩物| 国产精品久久国产精麻豆99网站| 欧美第2页| 男女在线免费观看| 色综合久久综合| 日韩一区综合| 国产女同91疯狂高潮互磨| 久久精品黄aa片一区二区三区| 美女的屁股无遮掩| 久久婷亚洲五月一区天天躁| 午夜激情一区二区| 成人丁香婷婷| 嫩草国产精品入口| www.av91| 国产精品久久久久久久泡妞| 国产乱妇乱子在线播视频播放网站| 亚洲第一淫片| 老妇高潮潮喷到猛进猛出| 毛片三级视频| 欧美午夜精品久久久| 亚洲精品久久夜色撩人男男小说| 成人tv888| 国产 高清 无码 在线播放| 依依成人在线| youjizzxxx69| 国产精品222| 4虎av| 91精品国产91久久久久久不卡| 日韩最猛xxx00性猛交| 色综合99久久久无码国产精品 | 超碰在线色| 俄罗斯黄色大片免费观看| 亚洲国产2021精品无码| 亚洲无砖码| 深夜福利成人| 日本一卡二卡四卡无卡国产| 亚洲人成电影在线| 久久久精品影院|