| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "chrome/test/automation/automation_proxy.h" | 5 #include "chrome/test/automation/automation_proxy.h" | 
| 6 | 6 | 
| 7 #include <gtest/gtest.h> | 7 #include <gtest/gtest.h> | 
| 8 | 8 | 
| 9 #include <sstream> | 9 #include <sstream> | 
| 10 | 10 | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 100       perform_version_check_(false), | 100       perform_version_check_(false), | 
| 101       disconnect_on_failure_(disconnect_on_failure), | 101       disconnect_on_failure_(disconnect_on_failure), | 
| 102       command_execution_timeout_( | 102       command_execution_timeout_( | 
| 103           TimeDelta::FromMilliseconds(command_execution_timeout_ms)), | 103           TimeDelta::FromMilliseconds(command_execution_timeout_ms)), | 
| 104       listener_thread_id_(0) { | 104       listener_thread_id_(0) { | 
| 105   // base::WaitableEvent::TimedWait() will choke if we give it a negative value. | 105   // base::WaitableEvent::TimedWait() will choke if we give it a negative value. | 
| 106   // Zero also seems unreasonable, since we need to wait for IPC, but at | 106   // Zero also seems unreasonable, since we need to wait for IPC, but at | 
| 107   // least it is legal... ;-) | 107   // least it is legal... ;-) | 
| 108   DCHECK_GE(command_execution_timeout_ms, 0); | 108   DCHECK_GE(command_execution_timeout_ms, 0); | 
| 109   listener_thread_id_ = PlatformThread::CurrentId(); | 109   listener_thread_id_ = PlatformThread::CurrentId(); | 
| 110   InitializeChannelID(); |  | 
| 111   InitializeHandleTracker(); | 110   InitializeHandleTracker(); | 
| 112   InitializeThread(); | 111   InitializeThread(); | 
| 113   InitializeChannel(); |  | 
| 114 } | 112 } | 
| 115 | 113 | 
| 116 AutomationProxy::~AutomationProxy() { | 114 AutomationProxy::~AutomationProxy() { | 
| 117   // Destruction order is important. Thread has to outlive the channel and | 115   // Destruction order is important. Thread has to outlive the channel and | 
| 118   // tracker has to outlive the thread since we access the tracker inside | 116   // tracker has to outlive the thread since we access the tracker inside | 
| 119   // AutomationMessageFilter::OnMessageReceived. | 117   // AutomationMessageFilter::OnMessageReceived. | 
| 120   Disconnect(); | 118   Disconnect(); | 
| 121   thread_.reset(); | 119   thread_.reset(); | 
| 122   tracker_.reset(); | 120   tracker_.reset(); | 
| 123 } | 121 } | 
| 124 | 122 | 
| 125 void AutomationProxy::InitializeChannelID() { | 123 std::string AutomationProxy::GenerateChannelID() { | 
| 126   // The channel counter keeps us out of trouble if we create and destroy | 124   // The channel counter keeps us out of trouble if we create and destroy | 
| 127   // several AutomationProxies sequentially over the course of a test run. | 125   // several AutomationProxies sequentially over the course of a test run. | 
| 128   // (Creating the channel sometimes failed before when running a lot of | 126   // (Creating the channel sometimes failed before when running a lot of | 
| 129   // tests in sequence, and our theory is that sometimes the channel ID | 127   // tests in sequence, and our theory is that sometimes the channel ID | 
| 130   // wasn't getting freed up in time for the next test.) | 128   // wasn't getting freed up in time for the next test.) | 
| 131   static int channel_counter = 0; | 129   static int channel_counter = 0; | 
| 132 | 130 | 
| 133   std::ostringstream buf; | 131   std::ostringstream buf; | 
| 134   buf << "ChromeTestingInterface:" << base::GetCurrentProcId() << | 132   buf << "ChromeTestingInterface:" << base::GetCurrentProcId() << | 
| 135          "." << ++channel_counter; | 133          "." << ++channel_counter; | 
| 136   channel_id_ = buf.str(); | 134   return buf.str(); | 
| 137 } | 135 } | 
| 138 | 136 | 
| 139 void AutomationProxy::InitializeThread() { | 137 void AutomationProxy::InitializeThread() { | 
| 140   scoped_ptr<base::Thread> thread( | 138   scoped_ptr<base::Thread> thread( | 
| 141       new base::Thread("AutomationProxy_BackgroundThread")); | 139       new base::Thread("AutomationProxy_BackgroundThread")); | 
| 142   base::Thread::Options options; | 140   base::Thread::Options options; | 
| 143   options.message_loop_type = MessageLoop::TYPE_IO; | 141   options.message_loop_type = MessageLoop::TYPE_IO; | 
| 144   bool thread_result = thread->StartWithOptions(options); | 142   bool thread_result = thread->StartWithOptions(options); | 
| 145   DCHECK(thread_result); | 143   DCHECK(thread_result); | 
| 146   thread_.swap(thread); | 144   thread_.swap(thread); | 
| 147 } | 145 } | 
| 148 | 146 | 
| 149 void AutomationProxy::InitializeChannel() { | 147 void AutomationProxy::InitializeChannel(const std::string& channel_id, | 
|  | 148                                         bool use_named_interface) { | 
| 150   DCHECK(shutdown_event_.get() != NULL); | 149   DCHECK(shutdown_event_.get() != NULL); | 
| 151 | 150 | 
| 152   // TODO(iyengar) | 151   // TODO(iyengar) | 
| 153   // The shutdown event could be global on the same lines as the automation | 152   // The shutdown event could be global on the same lines as the automation | 
| 154   // provider, where we use the shutdown event provided by the chrome browser | 153   // provider, where we use the shutdown event provided by the chrome browser | 
| 155   // process. | 154   // process. | 
| 156   channel_.reset(new IPC::SyncChannel( | 155   channel_.reset(new IPC::SyncChannel( | 
| 157     channel_id_, | 156     channel_id, | 
| 158     IPC::Channel::MODE_SERVER, | 157     use_named_interface ? IPC::Channel::MODE_NAMED_CLIENT | 
|  | 158                         : IPC::Channel::MODE_SERVER, | 
| 159     this,  // we are the listener | 159     this,  // we are the listener | 
| 160     thread_->message_loop(), | 160     thread_->message_loop(), | 
| 161     true, | 161     true, | 
| 162     shutdown_event_.get())); | 162     shutdown_event_.get())); | 
| 163   channel_->AddFilter(new AutomationMessageFilter(this)); | 163   channel_->AddFilter(new AutomationMessageFilter(this)); | 
| 164 } | 164 } | 
| 165 | 165 | 
| 166 void AutomationProxy::InitializeHandleTracker() { | 166 void AutomationProxy::InitializeHandleTracker() { | 
| 167   tracker_.reset(new AutomationHandleTracker()); | 167   tracker_.reset(new AutomationHandleTracker()); | 
| 168 } | 168 } | 
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 543                                                           password, | 543                                                           password, | 
| 544                                                           &success)); | 544                                                           &success)); | 
| 545   // If message sending unsuccessful or test failed, return false. | 545   // If message sending unsuccessful or test failed, return false. | 
| 546   return sent && success; | 546   return sent && success; | 
| 547 } | 547 } | 
| 548 #endif | 548 #endif | 
| 549 | 549 | 
| 550 bool AutomationProxy::ResetToDefaultTheme() { | 550 bool AutomationProxy::ResetToDefaultTheme() { | 
| 551   return Send(new AutomationMsg_ResetToDefaultTheme(0)); | 551   return Send(new AutomationMsg_ResetToDefaultTheme(0)); | 
| 552 } | 552 } | 
| OLD | NEW | 
|---|