Commit b670cf5c authored by Patrick Monette's avatar Patrick Monette Committed by Commit Bot

Make OnURLChanged() report the previous value

Bug: 993029
Change-Id: I340a39e49f1ca80f874c879f28368a1c76084b4b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1787888
Commit-Queue: Patrick Monette <pmonette@chromium.org>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#697848}
parent b5cc1d23
...@@ -144,7 +144,8 @@ class FrameNodeImpl ...@@ -144,7 +144,8 @@ class FrameNodeImpl
void Reset(FrameNodeImpl* frame_node, const GURL& url_in); void Reset(FrameNodeImpl* frame_node, const GURL& url_in);
ObservedProperty::NotifiesOnlyOnChanges<GURL, ObservedProperty::NotifiesOnlyOnChangesWithPreviousValue<
GURL,
&FrameNodeObserver::OnURLChanged> &FrameNodeObserver::OnURLChanged>
url; url;
bool has_nonempty_beforeunload = false; bool has_nonempty_beforeunload = false;
......
...@@ -98,8 +98,8 @@ namespace { ...@@ -98,8 +98,8 @@ namespace {
class LenientMockObserver : public FrameNodeImpl::Observer { class LenientMockObserver : public FrameNodeImpl::Observer {
public: public:
LenientMockObserver() {} LenientMockObserver() = default;
~LenientMockObserver() override {} ~LenientMockObserver() override = default;
MOCK_METHOD1(OnFrameNodeAdded, void(const FrameNode*)); MOCK_METHOD1(OnFrameNodeAdded, void(const FrameNode*));
MOCK_METHOD1(OnBeforeFrameNodeRemoved, void(const FrameNode*)); MOCK_METHOD1(OnBeforeFrameNodeRemoved, void(const FrameNode*));
...@@ -109,23 +109,19 @@ class LenientMockObserver : public FrameNodeImpl::Observer { ...@@ -109,23 +109,19 @@ class LenientMockObserver : public FrameNodeImpl::Observer {
MOCK_METHOD2(OnOriginTrialFreezePolicyChanged, MOCK_METHOD2(OnOriginTrialFreezePolicyChanged,
void(const FrameNode*, void(const FrameNode*,
const resource_coordinator::mojom::InterventionPolicy&)); const resource_coordinator::mojom::InterventionPolicy&));
MOCK_METHOD1(OnURLChanged, void(const FrameNode*)); MOCK_METHOD2(OnURLChanged, void(const FrameNode*, const GURL&));
MOCK_METHOD1(OnIsAdFrameChanged, void(const FrameNode*)); MOCK_METHOD1(OnIsAdFrameChanged, void(const FrameNode*));
MOCK_METHOD1(OnNonPersistentNotificationCreated, void(const FrameNode*)); MOCK_METHOD1(OnNonPersistentNotificationCreated, void(const FrameNode*));
MOCK_METHOD1(OnPriorityAndReasonChanged, void(const FrameNode*)); MOCK_METHOD1(OnPriorityAndReasonChanged, void(const FrameNode*));
void SetNotifiedFrameNode(const FrameNode* frame_node) { void SetCreatedFrameNode(const FrameNode* frame_node) {
notified_frame_node_ = frame_node; created_frame_node_ = frame_node;
} }
const FrameNode* TakeNotifiedFrameNode() { const FrameNode* created_frame_node() { return created_frame_node_; }
const FrameNode* node = notified_frame_node_;
notified_frame_node_ = nullptr;
return node;
}
private: private:
const FrameNode* notified_frame_node_ = nullptr; const FrameNode* created_frame_node_ = nullptr;
}; };
using MockObserver = ::testing::StrictMock<LenientMockObserver>; using MockObserver = ::testing::StrictMock<LenientMockObserver>;
...@@ -144,50 +140,46 @@ TEST_F(FrameNodeImplTest, ObserverWorks) { ...@@ -144,50 +140,46 @@ TEST_F(FrameNodeImplTest, ObserverWorks) {
// Create a frame node and expect a matching call to "OnFrameNodeAdded". // Create a frame node and expect a matching call to "OnFrameNodeAdded".
EXPECT_CALL(obs, OnFrameNodeAdded(_)) EXPECT_CALL(obs, OnFrameNodeAdded(_))
.WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode)); .WillOnce(Invoke(&obs, &MockObserver::SetCreatedFrameNode));
auto frame_node = CreateNode<FrameNodeImpl>(process.get(), page.get()); auto frame_node = CreateNode<FrameNodeImpl>(process.get(), page.get());
testing::Mock::VerifyAndClear(&obs);
const FrameNode* raw_frame_node = frame_node.get(); const FrameNode* raw_frame_node = frame_node.get();
EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); EXPECT_EQ(raw_frame_node, obs.created_frame_node());
// Invoke "SetIsCurrent" and expect a "OnIsCurrentChanged" callback. // Invoke "SetIsCurrent" and expect a "OnIsCurrentChanged" callback.
EXPECT_CALL(obs, OnIsCurrentChanged(_)) EXPECT_CALL(obs, OnIsCurrentChanged(raw_frame_node));
.WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode));
frame_node->SetIsCurrent(true); frame_node->SetIsCurrent(true);
EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); testing::Mock::VerifyAndClear(&obs);
// Invoke "SetNetworkAlmostIdle" and expect an "OnNetworkAlmostIdleChanged" // Invoke "SetNetworkAlmostIdle" and expect an "OnNetworkAlmostIdleChanged"
// callback. // callback.
EXPECT_CALL(obs, OnNetworkAlmostIdleChanged(_)) EXPECT_CALL(obs, OnNetworkAlmostIdleChanged(raw_frame_node));
.WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode));
frame_node->SetNetworkAlmostIdle(); frame_node->SetNetworkAlmostIdle();
EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); testing::Mock::VerifyAndClear(&obs);
// Invoke "SetLifecycleState" and expect an "OnFrameLifecycleStateChanged" // Invoke "SetLifecycleState" and expect an "OnFrameLifecycleStateChanged"
// callback. // callback.
EXPECT_CALL(obs, OnFrameLifecycleStateChanged(_)) EXPECT_CALL(obs, OnFrameLifecycleStateChanged(raw_frame_node));
.WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode));
frame_node->SetLifecycleState( frame_node->SetLifecycleState(
resource_coordinator::mojom::LifecycleState::kFrozen); resource_coordinator::mojom::LifecycleState::kFrozen);
EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); testing::Mock::VerifyAndClear(&obs);
// Invoke "OnNonPersistentNotificationCreated" and expect an // Invoke "OnNonPersistentNotificationCreated" and expect an
// "OnNonPersistentNotificationCreated" callback. // "OnNonPersistentNotificationCreated" callback.
EXPECT_CALL(obs, OnNonPersistentNotificationCreated(_)) EXPECT_CALL(obs, OnNonPersistentNotificationCreated(raw_frame_node));
.WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode));
frame_node->OnNonPersistentNotificationCreated(); frame_node->OnNonPersistentNotificationCreated();
EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); testing::Mock::VerifyAndClear(&obs);
// Invoke "OnNavigationCommitted" and expect an "OnURLChanged" callback. // Invoke "OnNavigationCommitted" and expect an "OnURLChanged" callback.
EXPECT_CALL(obs, OnURLChanged(_)) EXPECT_CALL(obs, OnURLChanged(raw_frame_node, _));
.WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode));
frame_node->OnNavigationCommitted(GURL("https://foo.com/"), true); frame_node->OnNavigationCommitted(GURL("https://foo.com/"), true);
EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); testing::Mock::VerifyAndClear(&obs);
// Release the frame node and expect a call to "OnBeforeFrameNodeRemoved". // Release the frame node and expect a call to "OnBeforeFrameNodeRemoved".
EXPECT_CALL(obs, OnBeforeFrameNodeRemoved(_)) EXPECT_CALL(obs, OnBeforeFrameNodeRemoved(raw_frame_node));
.WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode));
frame_node.reset(); frame_node.reset();
EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); testing::Mock::VerifyAndClear(&obs);
graph()->RemoveFrameNodeObserver(&obs); graph()->RemoveFrameNodeObserver(&obs);
} }
......
...@@ -179,7 +179,8 @@ class FrameNodeObserver { ...@@ -179,7 +179,8 @@ class FrameNodeObserver {
const InterventionPolicy& previous_value) = 0; const InterventionPolicy& previous_value) = 0;
// Invoked when the URL property changes. // Invoked when the URL property changes.
virtual void OnURLChanged(const FrameNode* frame_node) = 0; virtual void OnURLChanged(const FrameNode* frame_node,
const GURL& previous_value) = 0;
// Invoked when the IsAdFrame property changes. // Invoked when the IsAdFrame property changes.
virtual void OnIsAdFrameChanged(const FrameNode* frame_node) = 0; virtual void OnIsAdFrameChanged(const FrameNode* frame_node) = 0;
...@@ -214,7 +215,8 @@ class FrameNode::ObserverDefaultImpl : public FrameNodeObserver { ...@@ -214,7 +215,8 @@ class FrameNode::ObserverDefaultImpl : public FrameNodeObserver {
void OnOriginTrialFreezePolicyChanged( void OnOriginTrialFreezePolicyChanged(
const FrameNode* frame_node, const FrameNode* frame_node,
const InterventionPolicy& previous_value) override {} const InterventionPolicy& previous_value) override {}
void OnURLChanged(const FrameNode* frame_node) override {} void OnURLChanged(const FrameNode* frame_node,
const GURL& previous_value) override {}
void OnIsAdFrameChanged(const FrameNode* frame_node) override {} void OnIsAdFrameChanged(const FrameNode* frame_node) override {}
void OnNonPersistentNotificationCreated( void OnNonPersistentNotificationCreated(
const FrameNode* frame_node) override {} const FrameNode* frame_node) override {}
......
...@@ -221,7 +221,8 @@ void DiscardsGraphDumpImpl::OnBeforeFrameNodeRemoved( ...@@ -221,7 +221,8 @@ void DiscardsGraphDumpImpl::OnBeforeFrameNodeRemoved(
} }
void DiscardsGraphDumpImpl::OnURLChanged( void DiscardsGraphDumpImpl::OnURLChanged(
const performance_manager::FrameNode* frame_node) { const performance_manager::FrameNode* frame_node,
const GURL& previous_value) {
SendFrameNotification(frame_node, false); SendFrameNotification(frame_node, false);
StartFrameFaviconRequest(frame_node); StartFrameFaviconRequest(frame_node);
} }
......
...@@ -63,7 +63,8 @@ class DiscardsGraphDumpImpl : public discards::mojom::GraphDump, ...@@ -63,7 +63,8 @@ class DiscardsGraphDumpImpl : public discards::mojom::GraphDump,
void OnOriginTrialFreezePolicyChanged( void OnOriginTrialFreezePolicyChanged(
const performance_manager::FrameNode* frame_node, const performance_manager::FrameNode* frame_node,
const InterventionPolicy& previous_value) override {} const InterventionPolicy& previous_value) override {}
void OnURLChanged(const performance_manager::FrameNode* frame_node) override; void OnURLChanged(const performance_manager::FrameNode* frame_node,
const GURL& previous_value) override;
// Ignored. // Ignored.
void OnIsAdFrameChanged( void OnIsAdFrameChanged(
const performance_manager::FrameNode* frame_node) override {} const performance_manager::FrameNode* frame_node) override {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment