Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/tab_contents/thumbnail_generator.h" | 5 #include "chrome/browser/tab_contents/thumbnail_generator.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 165 NotificationService::AllSources()); | 165 NotificationService::AllSources()); |
| 166 registrar_.Add(this, NotificationType::RENDER_WIDGET_VISIBILITY_CHANGED, | 166 registrar_.Add(this, NotificationType::RENDER_WIDGET_VISIBILITY_CHANGED, |
| 167 NotificationService::AllSources()); | 167 NotificationService::AllSources()); |
| 168 registrar_.Add(this, NotificationType::RENDER_WIDGET_HOST_DESTROYED, | 168 registrar_.Add(this, NotificationType::RENDER_WIDGET_HOST_DESTROYED, |
| 169 NotificationService::AllSources()); | 169 NotificationService::AllSources()); |
| 170 registrar_.Add(this, NotificationType::TAB_CONTENTS_DISCONNECTED, | 170 registrar_.Add(this, NotificationType::TAB_CONTENTS_DISCONNECTED, |
| 171 NotificationService::AllSources()); | 171 NotificationService::AllSources()); |
| 172 } | 172 } |
| 173 } | 173 } |
| 174 | 174 |
| 175 void ThumbnailGenerator::MonitorRenderer( | |
| 176 RenderWidgetHost* renderer, | |
|
brettw
2011/01/03 19:48:30
This should fit on the previous line, I think. (Th
DaveMoore
2011/01/07 19:04:05
Done.
| |
| 177 bool monitor) { | |
| 178 Source<RenderWidgetHost> renderer_source = Source<RenderWidgetHost>(renderer); | |
| 179 bool currently_monitored = | |
| 180 registrar_.IsRegistered( | |
| 181 this, | |
| 182 NotificationType::RENDER_WIDGET_HOST_WILL_DESTROY_BACKING_STORE, | |
| 183 renderer_source); | |
| 184 if (monitor |= currently_monitored) { | |
| 185 if (monitor) { | |
| 186 registrar_.Add( | |
| 187 this, | |
| 188 NotificationType::RENDER_WIDGET_HOST_WILL_DESTROY_BACKING_STORE, | |
| 189 renderer_source); | |
| 190 registrar_.Add( | |
| 191 this, | |
| 192 NotificationType::RENDER_WIDGET_HOST_DID_UPDATE_BACKING_STORE, | |
| 193 renderer_source); | |
| 194 registrar_.Add( | |
| 195 this, | |
| 196 NotificationType::RENDER_WIDGET_HOST_DID_RECEIVE_PAINT_AT_SIZE_ACK, | |
| 197 renderer_source); | |
| 198 } else { | |
| 199 registrar_.Remove( | |
| 200 this, | |
| 201 NotificationType::RENDER_WIDGET_HOST_WILL_DESTROY_BACKING_STORE, | |
| 202 renderer_source); | |
| 203 registrar_.Remove( | |
| 204 this, | |
| 205 NotificationType::RENDER_WIDGET_HOST_DID_UPDATE_BACKING_STORE, | |
| 206 renderer_source); | |
| 207 registrar_.Remove( | |
| 208 this, | |
| 209 NotificationType::RENDER_WIDGET_HOST_DID_RECEIVE_PAINT_AT_SIZE_ACK, | |
| 210 renderer_source); | |
| 211 } | |
| 212 } | |
| 213 } | |
| 214 | |
| 175 void ThumbnailGenerator::AskForSnapshot(RenderWidgetHost* renderer, | 215 void ThumbnailGenerator::AskForSnapshot(RenderWidgetHost* renderer, |
| 176 bool prefer_backing_store, | 216 bool prefer_backing_store, |
| 177 ThumbnailReadyCallback* callback, | 217 ThumbnailReadyCallback* callback, |
| 178 gfx::Size page_size, | 218 gfx::Size page_size, |
| 179 gfx::Size desired_size) { | 219 gfx::Size desired_size) { |
| 180 if (prefer_backing_store) { | 220 if (prefer_backing_store) { |
| 181 BackingStore* backing_store = renderer->GetBackingStore(false); | 221 BackingStore* backing_store = renderer->GetBackingStore(false); |
| 182 if (backing_store) { | 222 if (backing_store) { |
| 183 // We were able to find a non-null backing store for this renderer, so | 223 // We were able to find a non-null backing store for this renderer, so |
| 184 // we'll go with it. | 224 // we'll go with it. |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 349 } | 389 } |
| 350 } | 390 } |
| 351 | 391 |
| 352 void ThumbnailGenerator::Observe(NotificationType type, | 392 void ThumbnailGenerator::Observe(NotificationType type, |
| 353 const NotificationSource& source, | 393 const NotificationSource& source, |
| 354 const NotificationDetails& details) { | 394 const NotificationDetails& details) { |
| 355 switch (type.value) { | 395 switch (type.value) { |
| 356 case NotificationType::RENDER_VIEW_HOST_CREATED_FOR_TAB: { | 396 case NotificationType::RENDER_VIEW_HOST_CREATED_FOR_TAB: { |
| 357 // Install our observer for all new RVHs. | 397 // Install our observer for all new RVHs. |
| 358 RenderViewHost* renderer = Details<RenderViewHost>(details).ptr(); | 398 RenderViewHost* renderer = Details<RenderViewHost>(details).ptr(); |
| 359 renderer->set_painting_observer(this); | 399 MonitorRenderer(renderer, true); |
| 360 break; | 400 break; |
| 361 } | 401 } |
| 362 | 402 |
| 363 case NotificationType::RENDER_WIDGET_VISIBILITY_CHANGED: | 403 case NotificationType::RENDER_WIDGET_VISIBILITY_CHANGED: |
| 364 if (*Details<bool>(details).ptr()) | 404 if (*Details<bool>(details).ptr()) |
| 365 WidgetShown(Source<RenderWidgetHost>(source).ptr()); | 405 WidgetShown(Source<RenderWidgetHost>(source).ptr()); |
| 366 else | 406 else |
| 367 WidgetHidden(Source<RenderWidgetHost>(source).ptr()); | 407 WidgetHidden(Source<RenderWidgetHost>(source).ptr()); |
| 368 break; | 408 break; |
| 369 | 409 |
| 370 case NotificationType::RENDER_WIDGET_HOST_DESTROYED: | 410 case NotificationType::RENDER_WIDGET_HOST_DESTROYED: |
| 371 WidgetDestroyed(Source<RenderWidgetHost>(source).ptr()); | 411 WidgetDestroyed(Source<RenderWidgetHost>(source).ptr()); |
| 372 break; | 412 break; |
| 373 | 413 |
| 414 case NotificationType::RENDER_WIDGET_HOST_WILL_DESTROY_BACKING_STORE: | |
| 415 WidgetWillDestroyBackingStore( | |
| 416 Source<RenderWidgetHost>(source).ptr(), | |
| 417 Details<BackingStore>(details).ptr()); | |
| 418 break; | |
| 419 | |
| 420 case NotificationType::RENDER_WIDGET_HOST_DID_UPDATE_BACKING_STORE: | |
| 421 WidgetDidUpdateBackingStore(Source<RenderWidgetHost>(source).ptr()); | |
| 422 break; | |
| 423 | |
| 424 case NotificationType::RENDER_WIDGET_HOST_DID_RECEIVE_PAINT_AT_SIZE_ACK: { | |
| 425 RenderWidgetHost::PaintAtSizeAckDetails* size_ack_details = | |
| 426 Details<RenderWidgetHost::PaintAtSizeAckDetails>(details).ptr(); | |
| 427 WidgetDidReceivePaintAtSizeAck( | |
| 428 Source<RenderWidgetHost>(source).ptr(), | |
| 429 size_ack_details->tag, | |
| 430 size_ack_details->size); | |
| 431 break; | |
| 432 } | |
| 433 | |
| 374 case NotificationType::TAB_CONTENTS_DISCONNECTED: | 434 case NotificationType::TAB_CONTENTS_DISCONNECTED: |
| 375 TabContentsDisconnected(Source<TabContents>(source).ptr()); | 435 TabContentsDisconnected(Source<TabContents>(source).ptr()); |
| 376 break; | 436 break; |
| 377 | 437 |
| 378 default: | 438 default: |
| 379 NOTREACHED(); | 439 NOTREACHED(); |
| 380 } | 440 } |
| 381 } | 441 } |
| 382 | 442 |
| 383 void ThumbnailGenerator::WidgetShown(RenderWidgetHost* widget) { | 443 void ThumbnailGenerator::WidgetShown(RenderWidgetHost* widget) { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 468 &ThumbnailGenerator::ShownDelayHandler); | 528 &ThumbnailGenerator::ShownDelayHandler); |
| 469 } | 529 } |
| 470 } | 530 } |
| 471 | 531 |
| 472 void ThumbnailGenerator::EraseHostFromShownList(RenderWidgetHost* widget) { | 532 void ThumbnailGenerator::EraseHostFromShownList(RenderWidgetHost* widget) { |
| 473 std::vector<RenderWidgetHost*>::iterator found = | 533 std::vector<RenderWidgetHost*>::iterator found = |
| 474 std::find(shown_hosts_.begin(), shown_hosts_.end(), widget); | 534 std::find(shown_hosts_.begin(), shown_hosts_.end(), widget); |
| 475 if (found != shown_hosts_.end()) | 535 if (found != shown_hosts_.end()) |
| 476 shown_hosts_.erase(found); | 536 shown_hosts_.erase(found); |
| 477 } | 537 } |
| OLD | NEW |