blob: 129049a676df03f997cf6878d40f2e2765984a49 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_MEDIA_WEBRTC_SAME_ORIGIN_OBSERVER_H_
#define CHROME_BROWSER_MEDIA_WEBRTC_SAME_ORIGIN_OBSERVER_H_
#include "base/functional/callback.h"
#include "content/public/browser/web_contents_observer.h"
#include "url/origin.h"
namespace content {
class WebContents;
}
// This observer class will trigger the provided callback whenever the observed
// WebContents's origin either now or no longer matches the provided origin.
// This will not trigger the callback until the navigation has been committed,
// so that WebContents::GetLastCommittedURL will return the new origin, and thus
// allow for easier code re-use. Note that that Loading hasn't actually started
// yet, so this is still suitable for listening to for, e.g., terminating a tab
// capture when a site is no longer the same origin.
class SameOriginObserver : public content::WebContentsObserver {
public:
SameOriginObserver(content::WebContents* observed_contents,
const url::Origin& reference_origin,
base::RepeatingCallback<void(content::WebContents*)>
on_same_origin_state_changed);
~SameOriginObserver() override;
// WebContentsObserver
void PrimaryPageChanged(content::Page& page) override;
private:
const url::Origin reference_origin_;
base::RepeatingCallback<void(content::WebContents*)>
on_same_origin_state_changed_;
bool is_same_origin_ = false;
};
#endif // CHROME_BROWSER_MEDIA_WEBRTC_SAME_ORIGIN_OBSERVER_H_