Chromium Code Reviews| 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..2fd4a845ed19cdc901e41b5531fbe85f1c6cabad 100644 |
| --- a/chrome/test/chromedriver/session_command.cc |
| +++ b/chrome/test/chromedriver/session_command.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/test/chromedriver/session_command.h" |
| #include "base/callback.h" |
| +#include "base/logging.h" |
|
craigdh
2013/02/06 00:55:59
Not needed, I'll remove it in the next upload.
|
| #include "base/memory/ref_counted.h" |
| #include "base/synchronization/lock.h" |
| #include "base/values.h" |
| @@ -13,22 +14,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 +30,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.IsError() && status.code() == kNoSuchFrame) { |
|
chrisgao (Use stgao instead)
2013/02/06 01:32:14
I think status.IsError() is unnecessary.
craigdh
2013/02/06 18:52:49
Done.
|
| + 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; |