Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/browser_plugin/browser_plugin.h" | 5 #include "content/renderer/browser_plugin/browser_plugin.h" |
| 6 | 6 |
| 7 #include "base/json/json_string_value_serializer.h" | 7 #include "base/json/json_string_value_serializer.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/string_number_conversions.h" | |
| 9 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
| 11 #include "content/common/browser_plugin_messages.h" | 12 #include "content/common/browser_plugin_messages.h" |
| 12 #include "content/common/view_messages.h" | 13 #include "content/common/view_messages.h" |
| 13 #include "content/public/common/content_client.h" | 14 #include "content/public/common/content_client.h" |
| 14 #include "content/public/renderer/content_renderer_client.h" | 15 #include "content/public/renderer/content_renderer_client.h" |
| 15 #include "content/renderer/browser_plugin/browser_plugin_bindings.h" | 16 #include "content/renderer/browser_plugin/browser_plugin_bindings.h" |
| 16 #include "content/renderer/browser_plugin/browser_plugin_manager.h" | 17 #include "content/renderer/browser_plugin/browser_plugin_manager.h" |
| 17 #include "content/renderer/render_process_impl.h" | 18 #include "content/renderer/render_process_impl.h" |
| 18 #include "content/renderer/render_thread_impl.h" | 19 #include "content/renderer/render_thread_impl.h" |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 49 // Events. | 50 // Events. |
| 50 const char kEventExit[] = "exit"; | 51 const char kEventExit[] = "exit"; |
| 51 const char kEventLoadAbort[] = "loadabort"; | 52 const char kEventLoadAbort[] = "loadabort"; |
| 52 const char kEventLoadCommit[] = "loadcommit"; | 53 const char kEventLoadCommit[] = "loadcommit"; |
| 53 const char kEventLoadRedirect[] = "loadredirect"; | 54 const char kEventLoadRedirect[] = "loadredirect"; |
| 54 const char kEventLoadStart[] = "loadstart"; | 55 const char kEventLoadStart[] = "loadstart"; |
| 55 const char kEventLoadStop[] = "loadstop"; | 56 const char kEventLoadStop[] = "loadstop"; |
| 56 const char kEventSizeChanged[] = "sizechanged"; | 57 const char kEventSizeChanged[] = "sizechanged"; |
| 57 | 58 |
| 58 // Parameters/properties on events. | 59 // Parameters/properties on events. |
| 60 const char kAutoSize[] = "autosize"; | |
|
lazyboy
2012/11/30 19:15:06
I'd group them separately if we have to add them,
Fady Samuel
2012/11/30 21:56:50
Added UpdateDOMAttribute as an abstract method of
| |
| 59 const char kIsTopLevel[] = "isTopLevel"; | 61 const char kIsTopLevel[] = "isTopLevel"; |
| 62 const char kMaxHeight[] = "maxHeight"; | |
| 63 const char kMaxWidth[] = "maxWidth"; | |
| 64 const char kMinHeight[] = "minHeight"; | |
| 65 const char kMinWidth[] = "minWidth"; | |
| 60 const char kNewURL[] = "newUrl"; | 66 const char kNewURL[] = "newUrl"; |
| 61 const char kNewHeight[] = "newHeight"; | 67 const char kNewHeight[] = "newHeight"; |
| 62 const char kNewWidth[] = "newWidth"; | 68 const char kNewWidth[] = "newWidth"; |
| 63 const char kOldURL[] = "oldUrl"; | 69 const char kOldURL[] = "oldUrl"; |
| 64 const char kOldHeight[] = "oldHeight"; | 70 const char kOldHeight[] = "oldHeight"; |
| 65 const char kOldWidth[] = "oldWidth"; | 71 const char kOldWidth[] = "oldWidth"; |
| 66 const char kPartition[] = "partition"; | 72 const char kPartition[] = "partition"; |
| 67 const char kPersistPrefix[] = "persist:"; | 73 const char kPersistPrefix[] = "persist:"; |
| 68 const char kProcessId[] = "processId"; | 74 const char kProcessId[] = "processId"; |
| 75 const char kReason[] = "reason"; | |
| 69 const char kSrc[] = "src"; | 76 const char kSrc[] = "src"; |
| 70 const char kReason[] = "reason"; | |
| 71 const char kURL[] = "url"; | 77 const char kURL[] = "url"; |
| 72 | 78 |
| 73 // Error messages. | 79 // Error messages. |
| 74 const char kErrorAlreadyNavigated[] = | 80 const char kErrorAlreadyNavigated[] = |
| 75 "The object has already navigated, so its partition cannot be changed."; | 81 "The object has already navigated, so its partition cannot be changed."; |
| 76 const char kErrorInvalidPartition[] = | 82 const char kErrorInvalidPartition[] = |
| 77 "Invalid partition attribute."; | 83 "Invalid partition attribute."; |
| 78 | 84 |
| 79 static std::string TerminationStatusToString(base::TerminationStatus status) { | 85 static std::string TerminationStatusToString(base::TerminationStatus status) { |
| 80 switch (status) { | 86 switch (status) { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 181 browser_plugin_manager()->Send( | 187 browser_plugin_manager()->Send( |
| 182 new BrowserPluginHostMsg_NavigateGuest( | 188 new BrowserPluginHostMsg_NavigateGuest( |
| 183 render_view_routing_id_, | 189 render_view_routing_id_, |
| 184 instance_id_, | 190 instance_id_, |
| 185 src)); | 191 src)); |
| 186 // Record that we sent a NavigateGuest message to embedder. | 192 // Record that we sent a NavigateGuest message to embedder. |
| 187 // Once this instance has navigated, the storage partition cannot be changed, | 193 // Once this instance has navigated, the storage partition cannot be changed, |
| 188 // so this value is used for enforcing this. | 194 // so this value is used for enforcing this. |
| 189 navigate_src_sent_ = true; | 195 navigate_src_sent_ = true; |
| 190 src_ = src; | 196 src_ = src; |
| 197 UpdateAttribute(kSrc, src_); | |
|
lazyboy
2012/11/30 19:15:06
UpdateDOMAttribute maybe? b/c we already call the
Fady Samuel
2012/11/30 21:56:50
Done.
| |
| 191 return true; | 198 return true; |
| 192 } | 199 } |
| 193 | 200 |
| 194 void BrowserPlugin::SetAutoSizeAttribute(bool auto_size) { | 201 void BrowserPlugin::SetAutoSizeAttribute(bool auto_size) { |
| 195 if (auto_size_ == auto_size) | 202 if (auto_size_ == auto_size) |
| 196 return; | 203 return; |
| 197 auto_size_ = auto_size; | 204 auto_size_ = auto_size; |
| 205 UpdateAttribute(kAutoSize, auto_size_ ? "true" : "false"); | |
| 198 last_view_size_ = plugin_rect_.size(); | 206 last_view_size_ = plugin_rect_.size(); |
| 199 UpdateGuestAutoSizeState(); | 207 UpdateGuestAutoSizeState(); |
| 200 } | 208 } |
| 201 | 209 |
| 202 void BrowserPlugin::PopulateAutoSizeParameters( | 210 void BrowserPlugin::PopulateAutoSizeParameters( |
| 203 BrowserPluginHostMsg_AutoSize_Params* params) { | 211 BrowserPluginHostMsg_AutoSize_Params* params) { |
| 204 // If maxWidth or maxHeight have not been set, set them to the container size. | 212 // If maxWidth or maxHeight have not been set, set them to the container size. |
| 205 max_height_ = max_height_ ? max_height_ : height(); | 213 max_height_ = max_height_ ? max_height_ : height(); |
| 206 max_width_ = max_width_ ? max_width_ : width(); | 214 max_width_ = max_width_ ? max_width_ : width(); |
| 207 // minWidth should not be bigger than maxWidth, and minHeight should not be | 215 // minWidth should not be bigger than maxWidth, and minHeight should not be |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 252 #else | 260 #else |
| 253 bool BrowserPlugin::DamageBufferMatches( | 261 bool BrowserPlugin::DamageBufferMatches( |
| 254 const TransportDIB* damage_buffer, | 262 const TransportDIB* damage_buffer, |
| 255 const TransportDIB::Handle& other_damage_buffer_handle) { | 263 const TransportDIB::Handle& other_damage_buffer_handle) { |
| 256 if (!damage_buffer) | 264 if (!damage_buffer) |
| 257 return false; | 265 return false; |
| 258 return damage_buffer->handle() == other_damage_buffer_handle; | 266 return damage_buffer->handle() == other_damage_buffer_handle; |
| 259 } | 267 } |
| 260 #endif | 268 #endif |
| 261 | 269 |
| 270 void BrowserPlugin::UpdateAttribute( | |
| 271 const std::string& attribute_name, | |
| 272 const std::string& attribute_value) { | |
| 273 if (container()) { | |
| 274 container()->element().setAttribute( | |
| 275 WebKit::WebString::fromUTF8(attribute_name), | |
| 276 WebKit::WebString::fromUTF8(attribute_value)); | |
| 277 } | |
| 278 } | |
| 279 | |
| 262 void BrowserPlugin::SetMaxHeightAttribute(int max_height) { | 280 void BrowserPlugin::SetMaxHeightAttribute(int max_height) { |
| 263 if (max_height_ == max_height) | 281 if (max_height_ == max_height) |
| 264 return; | 282 return; |
| 265 max_height_ = max_height; | 283 max_height_ = max_height; |
| 266 if (!auto_size_) | 284 if (!auto_size_) |
| 267 return; | 285 return; |
| 286 UpdateAttribute(kMaxHeight, base::IntToString(max_height)); | |
| 268 UpdateGuestAutoSizeState(); | 287 UpdateGuestAutoSizeState(); |
| 269 } | 288 } |
| 270 | 289 |
| 271 void BrowserPlugin::SetMaxWidthAttribute(int max_width) { | 290 void BrowserPlugin::SetMaxWidthAttribute(int max_width) { |
| 272 if (max_width_ == max_width) | 291 if (max_width_ == max_width) |
| 273 return; | 292 return; |
| 274 max_width_ = max_width; | 293 max_width_ = max_width; |
| 275 if (!auto_size_) | 294 if (!auto_size_) |
| 276 return; | 295 return; |
| 296 UpdateAttribute(kMaxWidth, base::IntToString(max_width_)); | |
| 277 UpdateGuestAutoSizeState(); | 297 UpdateGuestAutoSizeState(); |
| 278 } | 298 } |
| 279 | 299 |
| 280 void BrowserPlugin::SetMinHeightAttribute(int min_height) { | 300 void BrowserPlugin::SetMinHeightAttribute(int min_height) { |
| 281 if (min_height_ == min_height) | 301 if (min_height_ == min_height) |
| 282 return; | 302 return; |
| 283 min_height_ = min_height; | 303 min_height_ = min_height; |
| 284 if (!auto_size_) | 304 if (!auto_size_) |
| 285 return; | 305 return; |
| 306 UpdateAttribute(kMinHeight, base::IntToString(min_height_)); | |
| 286 UpdateGuestAutoSizeState(); | 307 UpdateGuestAutoSizeState(); |
| 287 } | 308 } |
| 288 | 309 |
| 289 void BrowserPlugin::SetMinWidthAttribute(int min_width) { | 310 void BrowserPlugin::SetMinWidthAttribute(int min_width) { |
| 290 if (min_width_ == min_width) | 311 if (min_width_ == min_width) |
| 291 return; | 312 return; |
| 292 min_width_ = min_width; | 313 min_width_ = min_width; |
| 293 if (!auto_size_) | 314 if (!auto_size_) |
| 294 return; | 315 return; |
| 316 UpdateAttribute(kMinWidth, base::IntToString(min_width_)); | |
| 295 UpdateGuestAutoSizeState(); | 317 UpdateGuestAutoSizeState(); |
| 296 } | 318 } |
| 297 | 319 |
| 298 bool BrowserPlugin::InAutoSizeBounds(const gfx::Size& size) const { | 320 bool BrowserPlugin::InAutoSizeBounds(const gfx::Size& size) const { |
| 299 return size.width() <= max_width_ && size.height() <= max_height_; | 321 return size.width() <= max_width_ && size.height() <= max_height_; |
| 300 } | 322 } |
| 301 | 323 |
| 302 NPObject* BrowserPlugin::GetContentWindow() const { | 324 NPObject* BrowserPlugin::GetContentWindow() const { |
| 303 if (content_window_routing_id_ == MSG_ROUTING_NONE) | 325 if (content_window_routing_id_ == MSG_ROUTING_NONE) |
| 304 return NULL; | 326 return NULL; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 351 *error_message = kErrorInvalidPartition; | 373 *error_message = kErrorInvalidPartition; |
| 352 return false; | 374 return false; |
| 353 } | 375 } |
| 354 persist_storage_ = true; | 376 persist_storage_ = true; |
| 355 } else { | 377 } else { |
| 356 persist_storage_ = false; | 378 persist_storage_ = false; |
| 357 } | 379 } |
| 358 | 380 |
| 359 valid_partition_id_ = true; | 381 valid_partition_id_ = true; |
| 360 storage_partition_id_ = input; | 382 storage_partition_id_ = input; |
| 383 UpdateAttribute(kPartition, storage_partition_id_); | |
| 361 return true; | 384 return true; |
| 362 } | 385 } |
| 363 | 386 |
| 364 void BrowserPlugin::ParseAttributes(const WebKit::WebPluginParams& params) { | 387 void BrowserPlugin::ParseAttributes(const WebKit::WebPluginParams& params) { |
| 365 std::string src; | 388 std::string src; |
| 366 | 389 |
| 367 // Get the src attribute from the attributes vector | 390 // Get the src attribute from the attributes vector |
| 368 for (unsigned i = 0; i < params.attributeNames.size(); ++i) { | 391 for (unsigned i = 0; i < params.attributeNames.size(); ++i) { |
| 369 std::string attributeName = params.attributeNames[i].utf8(); | 392 std::string attributeName = params.attributeNames[i].utf8(); |
| 370 if (LowerCaseEqualsASCII(attributeName, kSrc)) { | 393 if (LowerCaseEqualsASCII(attributeName, kSrc)) { |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 606 props[kIsTopLevel] = base::Value::CreateBooleanValue(is_top_level); | 629 props[kIsTopLevel] = base::Value::CreateBooleanValue(is_top_level); |
| 607 | 630 |
| 608 TriggerEvent(kEventLoadStart, &props); | 631 TriggerEvent(kEventLoadStart, &props); |
| 609 } | 632 } |
| 610 | 633 |
| 611 void BrowserPlugin::LoadCommit( | 634 void BrowserPlugin::LoadCommit( |
| 612 const BrowserPluginMsg_LoadCommit_Params& params) { | 635 const BrowserPluginMsg_LoadCommit_Params& params) { |
| 613 // If the guest has just committed a new navigation then it is no longer | 636 // If the guest has just committed a new navigation then it is no longer |
| 614 // crashed. | 637 // crashed. |
| 615 guest_crashed_ = false; | 638 guest_crashed_ = false; |
| 616 src_ = params.url.spec(); | 639 if (params.is_top_level) { |
|
lazyboy
2012/11/30 19:15:06
Yes, please make this fix in a separate CL.
Fady Samuel
2012/11/30 21:56:50
Done.
| |
| 640 src_ = params.url.spec(); | |
| 641 UpdateAttribute(kSrc, src_.c_str()); | |
| 642 } | |
| 617 process_id_ = params.process_id; | 643 process_id_ = params.process_id; |
| 618 current_nav_entry_index_ = params.current_entry_index; | 644 current_nav_entry_index_ = params.current_entry_index; |
| 619 nav_entry_count_ = params.entry_count; | 645 nav_entry_count_ = params.entry_count; |
| 620 | 646 |
| 621 std::map<std::string, base::Value*> props; | 647 std::map<std::string, base::Value*> props; |
| 622 props[kURL] = base::Value::CreateStringValue(src_); | 648 props[kURL] = base::Value::CreateStringValue(src_); |
| 623 props[kIsTopLevel] = base::Value::CreateBooleanValue(params.is_top_level); | 649 props[kIsTopLevel] = base::Value::CreateBooleanValue(params.is_top_level); |
| 624 TriggerEvent(kEventLoadCommit, &props); | 650 TriggerEvent(kEventLoadCommit, &props); |
| 625 } | 651 } |
| 626 | 652 |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 977 void* notify_data) { | 1003 void* notify_data) { |
| 978 } | 1004 } |
| 979 | 1005 |
| 980 void BrowserPlugin::didFailLoadingFrameRequest( | 1006 void BrowserPlugin::didFailLoadingFrameRequest( |
| 981 const WebKit::WebURL& url, | 1007 const WebKit::WebURL& url, |
| 982 void* notify_data, | 1008 void* notify_data, |
| 983 const WebKit::WebURLError& error) { | 1009 const WebKit::WebURLError& error) { |
| 984 } | 1010 } |
| 985 | 1011 |
| 986 } // namespace content | 1012 } // namespace content |
| OLD | NEW |