| Index: chrome/test/chromedriver/session_command.cc
|
| diff --git a/chrome/test/chromedriver/session_command.cc b/chrome/test/chromedriver/session_command.cc
|
| index 439ce20a2d2163bdec3b0b7a3fbd64afcdcf6247..06bc07d73fb5ce1e64dde7251a34a0fc99124c49 100644
|
| --- a/chrome/test/chromedriver/session_command.cc
|
| +++ b/chrome/test/chromedriver/session_command.cc
|
| @@ -13,22 +13,6 @@
|
| #include "chrome/test/chromedriver/session_map.h"
|
| #include "chrome/test/chromedriver/status.h"
|
|
|
| -namespace {
|
| -
|
| -Status WaitForPendingNavigations(const Session& session) {
|
| - if (!session.chrome)
|
| - return Status(kOk);
|
| - std::string frame = session.frame;
|
| - if (frame == "") {
|
| - Status status = session.chrome->GetMainFrame(&frame);
|
| - if (status.IsError())
|
| - return status;
|
| - }
|
| - return session.chrome->WaitForPendingNavigations(frame);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| Status ExecuteSessionCommand(
|
| SessionMap* session_map,
|
| const SessionCommand& command,
|
| @@ -45,11 +29,19 @@ Status ExecuteSessionCommand(
|
| if (!session)
|
| return Status(kNoSuchSession, session_id);
|
|
|
| - Status nav_status = WaitForPendingNavigations(*session);
|
| + Status nav_status = session->WaitForPendingNavigations();
|
| if (nav_status.IsError())
|
| return nav_status;
|
| Status status = command.Run(session, params, out_value);
|
| - nav_status = WaitForPendingNavigations(*session);
|
| + // Switch to main frame and retry command if subframe no longer exists.
|
| + if (status.code() == kNoSuchFrame) {
|
| + session->frame = "";
|
| + nav_status = session->WaitForPendingNavigations();
|
| + if (nav_status.IsError())
|
| + return nav_status;
|
| + status = command.Run(session, params, out_value);
|
| + }
|
| + nav_status = session->WaitForPendingNavigations();
|
| if (status.IsOk() && nav_status.IsError() &&
|
| nav_status.code() != kDisconnected)
|
| return nav_status;
|
|
|