OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/browser/devtools/devtools_ui_bindings.h" | 5 #include "chrome/browser/devtools/devtools_ui_bindings.h" |
6 | 6 |
7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
8 #include "base/json/json_writer.h" | 8 #include "base/json/json_writer.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/prefs/scoped_user_pref_update.h" | 10 #include "base/prefs/scoped_user_pref_update.h" |
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
477 return NULL; | 477 return NULL; |
478 } | 478 } |
479 | 479 |
480 DevToolsUIBindings::DevToolsUIBindings(content::WebContents* web_contents) | 480 DevToolsUIBindings::DevToolsUIBindings(content::WebContents* web_contents) |
481 : profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), | 481 : profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), |
482 android_bridge_(DevToolsAndroidBridge::Factory::GetForProfile(profile_)), | 482 android_bridge_(DevToolsAndroidBridge::Factory::GetForProfile(profile_)), |
483 web_contents_(web_contents), | 483 web_contents_(web_contents), |
484 delegate_(new DefaultBindingsDelegate(web_contents_)), | 484 delegate_(new DefaultBindingsDelegate(web_contents_)), |
485 devices_updates_enabled_(false), | 485 devices_updates_enabled_(false), |
486 frontend_loaded_(false), | 486 frontend_loaded_(false), |
487 frontend_reattaching_(false), | |
487 weak_factory_(this) { | 488 weak_factory_(this) { |
488 g_instances.Get().push_back(this); | 489 g_instances.Get().push_back(this); |
489 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); | 490 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); |
490 web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false; | 491 web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false; |
491 | 492 |
492 file_helper_.reset(new DevToolsFileHelper(web_contents_, profile_, this)); | 493 file_helper_.reset(new DevToolsFileHelper(web_contents_, profile_, this)); |
493 file_system_indexer_ = new DevToolsFileSystemIndexer(); | 494 file_system_indexer_ = new DevToolsFileSystemIndexer(); |
494 extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( | 495 extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( |
495 web_contents_); | 496 web_contents_); |
496 | 497 |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
886 } | 887 } |
887 | 888 |
888 void DevToolsUIBindings::ClearPreferences() { | 889 void DevToolsUIBindings::ClearPreferences() { |
889 DictionaryPrefUpdate update(profile_->GetPrefs(), | 890 DictionaryPrefUpdate update(profile_->GetPrefs(), |
890 prefs::kDevToolsPreferences); | 891 prefs::kDevToolsPreferences); |
891 update.Get()->Clear(); | 892 update.Get()->Clear(); |
892 } | 893 } |
893 | 894 |
894 void DevToolsUIBindings::DispatchProtocolMessageFromDevToolsFrontend( | 895 void DevToolsUIBindings::DispatchProtocolMessageFromDevToolsFrontend( |
895 const std::string& message) { | 896 const std::string& message) { |
896 if (agent_host_.get()) | 897 if (agent_host_.get() && !frontend_reattaching_) |
pfeldman
2015/12/07 21:38:42
When does this happen and why should it be ignored
dgozman
2015/12/07 21:46:40
Happens in Reattach. First paragraph of the patch
pfeldman
2015/12/07 21:48:36
But how can it be dispatched twice?
dgozman
2015/12/07 22:03:53
Sorry, it wasn't clear. It's not the same message
| |
897 agent_host_->DispatchProtocolMessage(message); | 898 agent_host_->DispatchProtocolMessage(message); |
898 } | 899 } |
899 | 900 |
900 void DevToolsUIBindings::RecordEnumeratedHistogram(const std::string& name, | 901 void DevToolsUIBindings::RecordEnumeratedHistogram(const std::string& name, |
901 int sample, | 902 int sample, |
902 int boundary_value) { | 903 int boundary_value) { |
903 if (!(boundary_value >= 0 && boundary_value <= 100 && sample >= 0 && | 904 if (!(boundary_value >= 0 && boundary_value <= 100 && sample >= 0 && |
904 sample < boundary_value)) { | 905 sample < boundary_value)) { |
905 // TODO(nick): Replace with chrome::bad_message::ReceivedBadMessage(). | 906 // TODO(nick): Replace with chrome::bad_message::ReceivedBadMessage(). |
906 frontend_host_->BadMessageRecieved(); | 907 frontend_host_->BadMessageRecieved(); |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1119 | 1120 |
1120 void DevToolsUIBindings::AttachTo( | 1121 void DevToolsUIBindings::AttachTo( |
1121 const scoped_refptr<content::DevToolsAgentHost>& agent_host) { | 1122 const scoped_refptr<content::DevToolsAgentHost>& agent_host) { |
1122 if (agent_host_.get()) | 1123 if (agent_host_.get()) |
1123 Detach(); | 1124 Detach(); |
1124 agent_host_ = agent_host; | 1125 agent_host_ = agent_host; |
1125 agent_host_->AttachClient(this); | 1126 agent_host_->AttachClient(this); |
1126 } | 1127 } |
1127 | 1128 |
1128 void DevToolsUIBindings::Reattach() { | 1129 void DevToolsUIBindings::Reattach() { |
1130 frontend_reattaching_ = true; | |
1129 DCHECK(agent_host_.get()); | 1131 DCHECK(agent_host_.get()); |
1130 agent_host_->DetachClient(); | 1132 agent_host_->DetachClient(); |
1131 agent_host_->AttachClient(this); | 1133 agent_host_->AttachClient(this); |
1132 } | 1134 } |
1133 | 1135 |
1134 void DevToolsUIBindings::Detach() { | 1136 void DevToolsUIBindings::Detach() { |
1135 if (agent_host_.get()) | 1137 if (agent_host_.get()) |
1136 agent_host_->DetachClient(); | 1138 agent_host_->DetachClient(); |
1137 agent_host_ = NULL; | 1139 agent_host_ = NULL; |
1138 } | 1140 } |
(...skipping 29 matching lines...) Expand all Loading... | |
1168 javascript.append(", ").append(json); | 1170 javascript.append(", ").append(json); |
1169 } | 1171 } |
1170 } | 1172 } |
1171 } | 1173 } |
1172 javascript.append(");"); | 1174 javascript.append(");"); |
1173 web_contents_->GetMainFrame()->ExecuteJavaScript( | 1175 web_contents_->GetMainFrame()->ExecuteJavaScript( |
1174 base::UTF8ToUTF16(javascript)); | 1176 base::UTF8ToUTF16(javascript)); |
1175 } | 1177 } |
1176 | 1178 |
1177 void DevToolsUIBindings::DocumentOnLoadCompletedInMainFrame() { | 1179 void DevToolsUIBindings::DocumentOnLoadCompletedInMainFrame() { |
1180 frontend_reattaching_ = false; | |
1178 // In the DEBUG_DEVTOOLS mode, the DocumentOnLoadCompletedInMainFrame event | 1181 // In the DEBUG_DEVTOOLS mode, the DocumentOnLoadCompletedInMainFrame event |
1179 // arrives before the LoadCompleted event, thus it should not trigger the | 1182 // arrives before the LoadCompleted event, thus it should not trigger the |
1180 // frontend load handling. | 1183 // frontend load handling. |
1181 #if !defined(DEBUG_DEVTOOLS) | 1184 #if !defined(DEBUG_DEVTOOLS) |
1182 FrontendLoaded(); | 1185 FrontendLoaded(); |
1183 #endif | 1186 #endif |
1184 } | 1187 } |
1185 | 1188 |
1186 void DevToolsUIBindings::DidNavigateMainFrame() { | 1189 void DevToolsUIBindings::DidNavigateMainFrame() { |
1187 frontend_loaded_ = false; | 1190 frontend_loaded_ = false; |
1188 } | 1191 } |
1189 | 1192 |
1190 void DevToolsUIBindings::FrontendLoaded() { | 1193 void DevToolsUIBindings::FrontendLoaded() { |
1191 if (frontend_loaded_) | 1194 if (frontend_loaded_) |
1192 return; | 1195 return; |
1193 frontend_loaded_ = true; | 1196 frontend_loaded_ = true; |
1194 | 1197 |
1195 // Call delegate first - it seeds importants bit of information. | 1198 // Call delegate first - it seeds importants bit of information. |
1196 delegate_->OnLoadCompleted(); | 1199 delegate_->OnLoadCompleted(); |
1197 | 1200 |
1198 AddDevToolsExtensionsToClient(); | 1201 AddDevToolsExtensionsToClient(); |
1199 if (g_web_socket_api_channel) | 1202 if (g_web_socket_api_channel) |
1200 g_web_socket_api_channel->AttachedToBindings(this); | 1203 g_web_socket_api_channel->AttachedToBindings(this); |
1201 } | 1204 } |
OLD | NEW |