| Index: ios/web/web_state/web_state_impl.mm | 
| diff --git a/ios/web/web_state/web_state_impl.mm b/ios/web/web_state/web_state_impl.mm | 
| index 6946a50efbd2326b0b4c49d3258a5a30057ae5cb..ae277c097528f7307d29e80f29ae083b82d3b659 100644 | 
| --- a/ios/web/web_state/web_state_impl.mm | 
| +++ b/ios/web/web_state/web_state_impl.mm | 
| @@ -43,12 +43,10 @@ | 
|  | 
| /* static */ | 
| std::unique_ptr<WebState> WebState::Create(const CreateParams& params) { | 
| -  std::unique_ptr<WebStateImpl> web_state( | 
| -      new WebStateImpl(params.browser_state)); | 
| +  std::unique_ptr<WebStateImpl> web_state(new WebStateImpl(params)); | 
|  | 
| // Initialize the new session. | 
| -  BOOL opened_by_dom = NO; | 
| -  web_state->GetNavigationManagerImpl().InitializeSession(opened_by_dom); | 
| +  web_state->GetNavigationManagerImpl().InitializeSession(); | 
|  | 
| // This std::move is required to compile with the version of clang shipping | 
| // with Xcode 8.0+. Evalute whether the issue is fixed once a new version of | 
| @@ -60,7 +58,7 @@ | 
| std::unique_ptr<WebState> WebState::Create(const CreateParams& params, | 
| CRWSessionStorage* session_storage) { | 
| std::unique_ptr<WebStateImpl> web_state( | 
| -      new WebStateImpl(params.browser_state, session_storage)); | 
| +      new WebStateImpl(params, session_storage)); | 
|  | 
| // This std::move is required to compile with the version of clang shipping | 
| // with Xcode 8.0+. Evalute whether the issue is fixed once a new version of | 
| @@ -68,10 +66,10 @@ | 
| return std::move(web_state); | 
| } | 
|  | 
| -WebStateImpl::WebStateImpl(BrowserState* browser_state) | 
| -    : WebStateImpl(browser_state, nullptr) {} | 
| +WebStateImpl::WebStateImpl(const CreateParams& params) | 
| +    : WebStateImpl(params, nullptr) {} | 
|  | 
| -WebStateImpl::WebStateImpl(BrowserState* browser_state, | 
| +WebStateImpl::WebStateImpl(const CreateParams& params, | 
| CRWSessionStorage* session_storage) | 
| : delegate_(nullptr), | 
| is_loading_(false), | 
| @@ -79,6 +77,7 @@ | 
| facade_delegate_(nullptr), | 
| web_controller_(nil), | 
| interstitial_(nullptr), | 
| +      opened_by_dom_(params.opened_by_dom), | 
| weak_factory_(this) { | 
| // Create or deserialize the NavigationManager. | 
| if (session_storage) { | 
| @@ -88,7 +87,7 @@ | 
| navigation_manager_.reset(new NavigationManagerImpl()); | 
| } | 
| navigation_manager_->SetDelegate(this); | 
| -  navigation_manager_->SetBrowserState(browser_state); | 
| +  navigation_manager_->SetBrowserState(params.browser_state); | 
| // Send creation event and create the web controller. | 
| GlobalWebStateEventTracker::GetInstance()->OnWebStateCreated(this); | 
| web_controller_.reset([[CRWWebController alloc] initWithWebState:this]); | 
| @@ -721,6 +720,10 @@ | 
| return [web_controller_ webViewProxy]; | 
| } | 
|  | 
| +bool WebStateImpl::IsOpenedByDOM() const { | 
| +  return opened_by_dom_; | 
| +} | 
| + | 
| void WebStateImpl::OnProvisionalNavigationStarted(const GURL& url) { | 
| for (auto& observer : observers_) | 
| observer.ProvisionalNavigationStarted(url); | 
|  |