| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/web/web_view_counter_impl.h" |
| |
| #include <stddef.h> |
| |
| #include "base/logging.h" |
| #include "ios/web/public/browser_state.h" |
| #include "ios/web/public/web_thread.h" |
| |
| namespace web { |
| |
| namespace { |
| // A key used to associate a WebViewCounter with a BrowserState. |
| const char kWebViewCounterKeyName[] = "web_view_counter"; |
| } // namespace |
| |
| WebViewCounterImpl::WebViewCounterImpl() { |
| DCHECK_CURRENTLY_ON_WEB_THREAD(WebThread::UI); |
| } |
| |
| WebViewCounterImpl::~WebViewCounterImpl() { |
| DCHECK_CURRENTLY_ON_WEB_THREAD(WebThread::UI); |
| } |
| |
| // static |
| WebViewCounter* WebViewCounter::FromBrowserState( |
| web::BrowserState* browser_state) { |
| DCHECK_CURRENTLY_ON_WEB_THREAD(WebThread::UI); |
| DCHECK(browser_state); |
| |
| return WebViewCounterImpl::FromBrowserState(browser_state); |
| } |
| |
| // static |
| WebViewCounterImpl* WebViewCounterImpl::FromBrowserState( |
| web::BrowserState* browser_state) { |
| DCHECK_CURRENTLY_ON_WEB_THREAD(WebThread::UI); |
| DCHECK(browser_state); |
| |
| if (!browser_state->GetUserData(kWebViewCounterKeyName)) { |
| browser_state->SetUserData(kWebViewCounterKeyName, |
| new WebViewCounterImpl()); |
| } |
| return static_cast<WebViewCounterImpl*>( |
| browser_state->GetUserData(kWebViewCounterKeyName)); |
| } |
| |
| size_t WebViewCounterImpl::GetWKWebViewCount() { |
| DCHECK_CURRENTLY_ON_WEB_THREAD(WebThread::UI); |
| return wk_web_view_counter_.Size(); |
| } |
| |
| void WebViewCounterImpl::InsertWKWebView(WKWebView* wk_web_view) { |
| DCHECK_CURRENTLY_ON_WEB_THREAD(WebThread::UI); |
| DCHECK(wk_web_view); |
| DCHECK([wk_web_view isKindOfClass:[WKWebView class]]); |
| |
| wk_web_view_counter_.Insert(wk_web_view); |
| } |
| |
| } // namespace web |