| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/commerce/content/browser/web_contents_wrapper.h" |
| |
| #include "base/strings/string_util.h" |
| #include "base/values.h" |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/browser/render_frame_host.h" |
| |
| namespace commerce { |
| |
| WebContentsWrapper::WebContentsWrapper(content::WebContents* web_contents, |
| int32_t js_world_id) |
| : web_contents_(web_contents), js_world_id_(js_world_id) {} |
| |
| WebContentsWrapper::~WebContentsWrapper() = default; |
| |
| const GURL& WebContentsWrapper::GetLastCommittedURL() const { |
| if (!web_contents_) |
| return GURL::EmptyGURL(); |
| |
| return web_contents_->GetLastCommittedURL(); |
| } |
| |
| const std::u16string& WebContentsWrapper::GetTitle() { |
| return web_contents_ ? web_contents_->GetTitle() : base::EmptyString16(); |
| } |
| |
| bool WebContentsWrapper::IsFirstLoadForNavigationFinished() { |
| return is_first_load_for_nav_finished_; |
| } |
| |
| void WebContentsWrapper::SetIsFirstLoadForNavigationFinished(bool finished) { |
| is_first_load_for_nav_finished_ = finished; |
| } |
| |
| bool WebContentsWrapper::IsOffTheRecord() { |
| if (!web_contents_ || !web_contents_->GetBrowserContext()) |
| return false; |
| |
| return web_contents_->GetBrowserContext()->IsOffTheRecord(); |
| } |
| |
| void WebContentsWrapper::RunJavascript( |
| const std::u16string& script, |
| base::OnceCallback<void(const base::Value)> callback) { |
| if (!web_contents_ || !web_contents_->GetPrimaryMainFrame()) { |
| std::move(callback).Run(base::Value()); |
| return; |
| } |
| |
| web_contents_->GetPrimaryMainFrame()->ExecuteJavaScriptInIsolatedWorld( |
| script, std::move(callback), js_world_id_); |
| } |
| |
| ukm::SourceId WebContentsWrapper::GetPageUkmSourceId() { |
| if (!web_contents_ || !web_contents_->GetPrimaryMainFrame()) { |
| return ukm::kInvalidSourceId; |
| } |
| return web_contents_->GetPrimaryMainFrame()->GetPageUkmSourceId(); |
| } |
| |
| void WebContentsWrapper::ClearWebContentsPointer() { |
| web_contents_ = nullptr; |
| } |
| |
| content::RenderFrameHost* WebContentsWrapper::GetPrimaryMainFrame() { |
| if (!web_contents_) { |
| return nullptr; |
| } |
| return web_contents_->GetPrimaryMainFrame(); |
| } |
| |
| } // namespace commerce |