Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(700)

Side by Side Diff: chrome/browser/ui/views/tabs/tab.cc

Issue 11753021: Clean up the tab animation code (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/views/tabs/tab.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "chrome/browser/ui/views/tabs/tab.h" 5 #include "chrome/browser/ui/views/tabs/tab.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/alias.h" 10 #include "base/debug/alias.h"
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 // switches to them. Don't display animations for these unless they're 484 // switches to them. Don't display animations for these unless they're
485 // selected (i.e. in the foreground) -- we won't reload these 485 // selected (i.e. in the foreground) -- we won't reload these
486 // automatically since we don't want to get into a crash loop. 486 // automatically since we don't want to get into a crash loop.
487 if (IsSelected() || 487 if (IsSelected() ||
488 data_.crashed_status != base::TERMINATION_STATUS_PROCESS_WAS_KILLED) 488 data_.crashed_status != base::TERMINATION_STATUS_PROCESS_WAS_KILLED)
489 StartCrashAnimation(); 489 StartCrashAnimation();
490 #else 490 #else
491 StartCrashAnimation(); 491 StartCrashAnimation();
492 #endif 492 #endif
493 } 493 }
494
495 } else if ((data_.capture_state == TabRendererData::CAPTURE_STATE_NONE) &&
496 (old.capture_state != TabRendererData::CAPTURE_STATE_NONE)) {
497 StopRecordingAnimation();
498
499 } else if ((data_.capture_state != TabRendererData::CAPTURE_STATE_NONE) &&
500 (old.capture_state == TabRendererData::CAPTURE_STATE_NONE)) {
501 StartRecordingAnimation();
494 } else { 502 } else {
495 if (IsPerformingCrashAnimation()) 503 if (IsPerformingCrashAnimation())
496 StopCrashAnimation(); 504 StopCrashAnimation();
497 ResetCrashedFavicon(); 505 ResetCrashedFavicon();
498 } 506 }
499 507
500 // If the favicon changed, re-compute its dominant color. 508 // If the favicon changed, re-compute its dominant color.
501 if (controller() && 509 if (controller() &&
502 controller()->IsImmersiveStyle() && 510 controller()->IsImmersiveStyle() &&
503 !data_.favicon.isNull() && 511 !data_.favicon.isNull() &&
(...skipping 21 matching lines...) Expand all
525 // need to advance the animation frame. 533 // need to advance the animation frame.
526 return; 534 return;
527 } 535 }
528 536
529 TabRendererData::NetworkState old_state = data_.network_state; 537 TabRendererData::NetworkState old_state = data_.network_state;
530 data_.network_state = state; 538 data_.network_state = state;
531 AdvanceLoadingAnimation(old_state, state); 539 AdvanceLoadingAnimation(old_state, state);
532 } 540 }
533 541
534 void Tab::StartPulse() { 542 void Tab::StartPulse() {
535 if (!pulse_animation_.get()) { 543 if (!tab_animation_.get()) {
536 pulse_animation_.reset(new ui::ThrobAnimation(this)); 544 tab_animation_.reset(new ui::ThrobAnimation(this));
537 pulse_animation_->SetSlideDuration(kPulseDurationMs); 545 tab_animation_->SetSlideDuration(kPulseDurationMs);
538 if (animation_container_.get()) 546 if (animation_container_.get())
539 pulse_animation_->SetContainer(animation_container_.get()); 547 tab_animation_->SetContainer(animation_container_.get());
540 } 548 }
541 pulse_animation_->Reset(); 549 tab_animation_->Reset();
542 pulse_animation_->StartThrobbing(std::numeric_limits<int>::max()); 550 tab_animation_->StartThrobbing(std::numeric_limits<int>::max());
543 } 551 }
544 552
545 void Tab::StopPulse() { 553 void Tab::StopPulse() {
546 if (!pulse_animation_.get()) 554 if (!tab_animation_.get())
547 return; 555 return;
548 556
549 pulse_animation_->Stop(); // Do stop so we get notified. 557 tab_animation_->Stop(); // Do stop so we get notified.
550 pulse_animation_.reset(NULL); 558 tab_animation_.reset(NULL);
551 } 559 }
552 560
553 void Tab::StartMiniTabTitleAnimation() { 561 void Tab::StartMiniTabTitleAnimation() {
554 if (!mini_title_animation_.get()) { 562 if (!mini_title_animation_.get()) {
555 ui::MultiAnimation::Parts parts; 563 ui::MultiAnimation::Parts parts;
556 parts.push_back( 564 parts.push_back(
557 ui::MultiAnimation::Part(kMiniTitleChangeAnimationDuration1MS, 565 ui::MultiAnimation::Part(kMiniTitleChangeAnimationDuration1MS,
558 ui::Tween::EASE_OUT)); 566 ui::Tween::EASE_OUT));
559 parts.push_back( 567 parts.push_back(
560 ui::MultiAnimation::Part(kMiniTitleChangeAnimationDuration2MS, 568 ui::MultiAnimation::Part(kMiniTitleChangeAnimationDuration2MS,
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 int Tab::GetImmersiveHeight() { 640 int Tab::GetImmersiveHeight() {
633 return kImmersiveTabHeight; 641 return kImmersiveTabHeight;
634 } 642 }
635 643
636 //////////////////////////////////////////////////////////////////////////////// 644 ////////////////////////////////////////////////////////////////////////////////
637 // Tab, AnimationDelegate overrides: 645 // Tab, AnimationDelegate overrides:
638 646
639 void Tab::AnimationProgressed(const ui::Animation* animation) { 647 void Tab::AnimationProgressed(const ui::Animation* animation) {
640 // Ignore if the pulse animation is being performed on active tab because 648 // Ignore if the pulse animation is being performed on active tab because
641 // it repaints the same image. See |Tab::PaintTabBackground()|. 649 // it repaints the same image. See |Tab::PaintTabBackground()|.
642 if (animation == pulse_animation_.get() && IsActive()) 650 if (animation == tab_animation_.get() && IsActive())
643 return; 651 return;
644 SchedulePaint(); 652 SchedulePaint();
645 } 653 }
646 654
647 void Tab::AnimationCanceled(const ui::Animation* animation) { 655 void Tab::AnimationCanceled(const ui::Animation* animation) {
648 SchedulePaint(); 656 SchedulePaint();
649 } 657 }
650 658
651 void Tab::AnimationEnded(const ui::Animation* animation) { 659 void Tab::AnimationEnded(const ui::Animation* animation) {
652 SchedulePaint(); 660 SchedulePaint();
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 canvas->DrawImageInt(*tab_image->image_r, width() - tab_image->r_width, 0); 1296 canvas->DrawImageInt(*tab_image->image_r, width() - tab_image->r_width, 0);
1289 } 1297 }
1290 1298
1291 void Tab::PaintIcon(gfx::Canvas* canvas) { 1299 void Tab::PaintIcon(gfx::Canvas* canvas) {
1292 gfx::Rect bounds = GetIconBounds(); 1300 gfx::Rect bounds = GetIconBounds();
1293 if (bounds.IsEmpty()) 1301 if (bounds.IsEmpty())
1294 return; 1302 return;
1295 1303
1296 bounds.set_x(GetMirroredXForRect(bounds)); 1304 bounds.set_x(GetMirroredXForRect(bounds));
1297 1305
1306 // Paint network activity (aka throbber) animation frame.
1298 if (data().network_state != TabRendererData::NETWORK_STATE_NONE) { 1307 if (data().network_state != TabRendererData::NETWORK_STATE_NONE) {
1299 ui::ThemeProvider* tp = GetThemeProvider(); 1308 ui::ThemeProvider* tp = GetThemeProvider();
1300 gfx::ImageSkia frames(*tp->GetImageSkiaNamed( 1309 gfx::ImageSkia frames(*tp->GetImageSkiaNamed(
1301 (data().network_state == TabRendererData::NETWORK_STATE_WAITING) ? 1310 (data().network_state == TabRendererData::NETWORK_STATE_WAITING) ?
1302 IDR_THROBBER_WAITING : IDR_THROBBER)); 1311 IDR_THROBBER_WAITING : IDR_THROBBER));
1303 1312
1304 int icon_size = frames.height(); 1313 int icon_size = frames.height();
1305 int image_offset = loading_animation_frame_ * icon_size; 1314 int image_offset = loading_animation_frame_ * icon_size;
1306 DrawIconCenter(canvas, frames, image_offset, 1315 DrawIconCenter(canvas, frames, image_offset,
1307 icon_size, icon_size, bounds, false, SkPaint()); 1316 icon_size, icon_size, bounds, false, SkPaint());
1317 return;
1318 }
1319
1320 // Paint regular icon and potentially overlays.
1321 canvas->Save();
1322 canvas->ClipRect(GetLocalBounds());
1323 if (should_display_crashed_favicon_) {
1324 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
1325 gfx::ImageSkia crashed_favicon(*rb.GetImageSkiaNamed(IDR_SAD_FAVICON));
1326 bounds.set_y(bounds.y() + favicon_hiding_offset_);
1327 DrawIconCenter(canvas, crashed_favicon, 0,
1328 crashed_favicon.width(),
1329 crashed_favicon.height(), bounds, true, SkPaint());
1308 } else { 1330 } else {
1309 canvas->Save(); 1331 if (!data().favicon.isNull()) {
1310 canvas->ClipRect(GetLocalBounds()); 1332 if (data().capture_state == TabRendererData::CAPTURE_STATE_PROJECTING) {
1311 if (should_display_crashed_favicon_) { 1333 // If projecting, shrink favicon and add projection screen instead.
1312 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 1334 gfx::ImageSkia resized_icon =
1313 gfx::ImageSkia crashed_favicon(*rb.GetImageSkiaNamed(IDR_SAD_FAVICON)); 1335 gfx::ImageSkiaOperations::CreateResizedImage(
1314 bounds.set_y(bounds.y() + favicon_hiding_offset_); 1336 data().favicon,
1315 DrawIconCenter(canvas, crashed_favicon, 0, 1337 skia::ImageOperations::RESIZE_BEST,
1316 crashed_favicon.width(), 1338 gfx::Size(data().favicon.width() *
1317 crashed_favicon.height(), bounds, true, SkPaint()); 1339 kProjectingFaviconResizeScale,
1318 } else { 1340 data().favicon.height() *
1319 if (!data().favicon.isNull()) { 1341 kProjectingFaviconResizeScale));
1320 if (data().capture_state == TabRendererData::CAPTURE_STATE_PROJECTING) {
1321 // If projecting, shrink favicon and add projection screen instead.
1322 gfx::ImageSkia resized_icon =
1323 gfx::ImageSkiaOperations::CreateResizedImage(
1324 data().favicon,
1325 skia::ImageOperations::RESIZE_BEST,
1326 gfx::Size(data().favicon.width() *
1327 kProjectingFaviconResizeScale,
1328 data().favicon.height() *
1329 kProjectingFaviconResizeScale));
1330 1342
1331 gfx::Rect resized_bounds(bounds); 1343 gfx::Rect resized_bounds(bounds);
1332 // Need to shift it up a bit vertically because the projection screen 1344 // Need to shift it up a bit vertically because the projection screen
1333 // is thinner on the top and bottom. 1345 // is thinner on the top and bottom.
1334 resized_bounds.set_y(resized_bounds.y() - 1); 1346 resized_bounds.set_y(resized_bounds.y() - 1);
1335 1347
1336 DrawIconCenter(canvas, resized_icon, 0, 1348 DrawIconCenter(canvas, resized_icon, 0,
1337 resized_icon.width(), 1349 resized_icon.width(),
1338 resized_icon.height(), 1350 resized_icon.height(),
1339 resized_bounds, true, SkPaint()); 1351 resized_bounds, true, SkPaint());
1340 1352
1341 ui::ThemeProvider* tp = GetThemeProvider(); 1353 ui::ThemeProvider* tp = GetThemeProvider();
1342 gfx::ImageSkia projection_screen( 1354 gfx::ImageSkia projection_screen(
1343 *tp->GetImageSkiaNamed(IDR_TAB_CAPTURE)); 1355 *tp->GetImageSkiaNamed(IDR_TAB_CAPTURE));
1344 1356
1345 DrawIconCenter(canvas, projection_screen, 0, 1357 DrawIconCenter(canvas, projection_screen, 0,
1346 data().favicon.width(), 1358 data().favicon.width(),
1347 data().favicon.height(), 1359 data().favicon.height(),
1348 bounds, true, SkPaint()); 1360 bounds, true, SkPaint());
1349 } else { 1361 } else {
1350 // TODO(pkasting): Use code in tab_icon_view.cc:PaintIcon() (or switch 1362 // TODO(pkasting): Use code in tab_icon_view.cc:PaintIcon() (or switch
1351 // to using that class to render the favicon). 1363 // to using that class to render the favicon).
1352 DrawIconCenter(canvas, data().favicon, 0, 1364 DrawIconCenter(canvas, data().favicon, 0,
1353 data().favicon.width(), 1365 data().favicon.width(),
1354 data().favicon.height(), 1366 data().favicon.height(),
1355 bounds, true, SkPaint()); 1367 bounds, true, SkPaint());
1356 }
1357 } 1368 }
1358 } 1369 }
1359 canvas->Restore(); 1370 }
1371 canvas->Restore();
1360 1372
1361 if (data().capture_state != TabRendererData::CAPTURE_STATE_NONE) { 1373 // Paint recording or projecting animation overlay.
1362 if (!recording_animation_.get()) { 1374 if (data().capture_state != TabRendererData::CAPTURE_STATE_NONE) {
1363 recording_animation_.reset(new ui::ThrobAnimation(this)); 1375 SkPaint paint;
1364 recording_animation_->SetTweenType(ui::Tween::EASE_IN_OUT); 1376 paint.setAntiAlias(true);
1365 recording_animation_->SetThrobDuration(kRecordingDurationMs); 1377 U8CPU alpha = icon_animation_->GetCurrentValue() * 0xff;
1366 recording_animation_->StartThrobbing(-1); 1378 paint.setAlpha(alpha);
1367 } 1379 ui::ThemeProvider* tp = GetThemeProvider();
1368 1380
1369 SkPaint paint; 1381 if (data().capture_state == TabRendererData::CAPTURE_STATE_PROJECTING) {
1370 paint.setAntiAlias(true); 1382 // If projecting, add projection glow animation.
1371 U8CPU alpha = recording_animation_->GetCurrentValue() * 0xff; 1383 gfx::Rect glow_bounds(bounds);
1372 paint.setAlpha(alpha); 1384 glow_bounds.set_x(glow_bounds.x() - (32 - 24));
1373 ui::ThemeProvider* tp = GetThemeProvider(); 1385 glow_bounds.set_y(0);
1386 glow_bounds.set_width(glow_bounds.width() *
1387 kProjectingGlowResizeScale);
1388 glow_bounds.set_height(glow_bounds.height() *
1389 kProjectingGlowResizeScale);
1374 1390
1375 if (data().capture_state == TabRendererData::CAPTURE_STATE_PROJECTING) { 1391 gfx::ImageSkia projection_glow(
1376 // If projecting, add projection glow animation. 1392 *tp->GetImageSkiaNamed(IDR_TAB_CAPTURE_GLOW));
1377 gfx::Rect glow_bounds(bounds); 1393 DrawIconCenter(canvas, projection_glow, 0,
1378 glow_bounds.set_x(glow_bounds.x() - (32 - 24)); 1394 projection_glow.width(), projection_glow.height(),
1379 glow_bounds.set_y(0); 1395 glow_bounds, false, paint);
1380 glow_bounds.set_width(glow_bounds.width() * 1396 } else if (data().capture_state ==
1381 kProjectingGlowResizeScale); 1397 TabRendererData::CAPTURE_STATE_RECORDING) {
1382 glow_bounds.set_height(glow_bounds.height() * 1398 // If recording, fade the recording icon on top of the favicon.
1383 kProjectingGlowResizeScale); 1399 gfx::ImageSkia recording_dot(*tp->GetImageSkiaNamed(IDR_TAB_RECORDING));
1384 1400 DrawIconCenter(canvas, recording_dot, 0,
1385 gfx::ImageSkia projection_glow( 1401 recording_dot.width(), recording_dot.height(),
1386 *tp->GetImageSkiaNamed(IDR_TAB_CAPTURE_GLOW)); 1402 bounds, false, paint);
1387 DrawIconCenter(canvas, projection_glow, 0,
1388 projection_glow.width(), projection_glow.height(),
1389 glow_bounds, false, paint);
1390 } else if (data().capture_state ==
1391 TabRendererData::CAPTURE_STATE_RECORDING) {
1392 // If recording, fade the recording icon on top of the favicon.
1393 gfx::ImageSkia recording_dot(*tp->GetImageSkiaNamed(IDR_TAB_RECORDING));
1394 DrawIconCenter(canvas, recording_dot, 0,
1395 recording_dot.width(), recording_dot.height(),
1396 bounds, false, paint);
1397 } else {
1398 NOTREACHED();
1399 }
1400 } else { 1403 } else {
1401 recording_animation_.reset(); 1404 NOTREACHED();
1402 } 1405 }
1403 } 1406 }
1404 } 1407 }
1405 1408
1406 void Tab::PaintTitle(gfx::Canvas* canvas, SkColor title_color) { 1409 void Tab::PaintTitle(gfx::Canvas* canvas, SkColor title_color) {
1407 // Paint the Title. 1410 // Paint the Title.
1408 const gfx::Rect& title_bounds = GetTitleBounds(); 1411 const gfx::Rect& title_bounds = GetTitleBounds();
1409 string16 title = data().title; 1412 string16 title = data().title;
1410 1413
1411 if (title.empty()) { 1414 if (title.empty()) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 bool Tab::ShouldShowCloseBox() const { 1492 bool Tab::ShouldShowCloseBox() const {
1490 // The active tab never clips close button. 1493 // The active tab never clips close button.
1491 return !data().mini && (IsActive() || IconCapacity() >= 3); 1494 return !data().mini && (IsActive() || IconCapacity() >= 3);
1492 } 1495 }
1493 1496
1494 double Tab::GetThrobValue() { 1497 double Tab::GetThrobValue() {
1495 bool is_selected = IsSelected(); 1498 bool is_selected = IsSelected();
1496 double min = is_selected ? kSelectedTabOpacity : 0; 1499 double min = is_selected ? kSelectedTabOpacity : 0;
1497 double scale = is_selected ? kSelectedTabThrobScale : 1; 1500 double scale = is_selected ? kSelectedTabThrobScale : 1;
1498 1501
1499 if (pulse_animation_.get() && pulse_animation_->is_animating()) 1502 if (tab_animation_.get() && tab_animation_->is_animating())
1500 return pulse_animation_->GetCurrentValue() * kHoverOpacity * scale + min; 1503 return tab_animation_->GetCurrentValue() * kHoverOpacity * scale + min;
1501 1504
1502 if (hover_controller_.ShouldDraw()) { 1505 if (hover_controller_.ShouldDraw()) {
1503 return kHoverOpacity * hover_controller_.GetAnimationValue() * scale + 1506 return kHoverOpacity * hover_controller_.GetAnimationValue() * scale +
1504 min; 1507 min;
1505 } 1508 }
1506 1509
1507 return is_selected ? kSelectedTabOpacity : 0; 1510 return is_selected ? kSelectedTabOpacity : 0;
1508 } 1511 }
1509 1512
1510 void Tab::SetFaviconHidingOffset(int offset) { 1513 void Tab::SetFaviconHidingOffset(int offset) {
1511 favicon_hiding_offset_ = offset; 1514 favicon_hiding_offset_ = offset;
1512 ScheduleIconPaint(); 1515 ScheduleIconPaint();
1513 } 1516 }
1514 1517
1515 void Tab::DisplayCrashedFavicon() { 1518 void Tab::DisplayCrashedFavicon() {
1516 should_display_crashed_favicon_ = true; 1519 should_display_crashed_favicon_ = true;
1517 } 1520 }
1518 1521
1519 void Tab::ResetCrashedFavicon() { 1522 void Tab::ResetCrashedFavicon() {
1520 should_display_crashed_favicon_ = false; 1523 should_display_crashed_favicon_ = false;
1521 } 1524 }
1522 1525
1523 void Tab::StartCrashAnimation() { 1526 void Tab::StartCrashAnimation() {
1524 if (!crash_animation_.get()) 1527 icon_animation_.reset(new FaviconCrashAnimation(this));
1525 crash_animation_.reset(new FaviconCrashAnimation(this)); 1528 icon_animation_->Stop();
sky 2013/01/07 16:56:08 I don't think we need the Stop() here anymore (sin
cpu_(ooo_6.6-7.5) 2013/01/08 01:19:59 Done.
1526 crash_animation_->Stop(); 1529 icon_animation_->Start();
1527 crash_animation_->Start();
1528 } 1530 }
1529 1531
1530 void Tab::StopCrashAnimation() { 1532 void Tab::StopCrashAnimation() {
1531 if (!crash_animation_.get()) 1533 if (!icon_animation_.get())
1532 return; 1534 return;
1533 crash_animation_->Stop(); 1535 icon_animation_->Stop();
sky 2013/01/07 16:56:08 Do you need the stop here anymore?
cpu_(ooo_6.6-7.5) 2013/01/08 01:19:59 Done.
1536 icon_animation_.reset();
1537 }
1538
1539 void Tab::StartRecordingAnimation() {
1540 ui::ThrobAnimation* animation = new ui::ThrobAnimation(this);
1541 animation->SetTweenType(ui::Tween::EASE_IN_OUT);
1542 animation->SetThrobDuration(kRecordingDurationMs);
1543 animation->StartThrobbing(-1);
1544 icon_animation_.reset(animation);
1545 }
1546
1547 void Tab::StopRecordingAnimation() {
1548 if (!icon_animation_.get())
1549 return;
1550 icon_animation_->Stop();
1551 icon_animation_.reset();
1534 } 1552 }
1535 1553
1536 bool Tab::IsPerformingCrashAnimation() const { 1554 bool Tab::IsPerformingCrashAnimation() const {
1537 return crash_animation_.get() && crash_animation_->is_animating(); 1555 return icon_animation_.get() && data_.IsCrashed();
1538 } 1556 }
1539 1557
1540 void Tab::ScheduleIconPaint() { 1558 void Tab::ScheduleIconPaint() {
1541 gfx::Rect bounds = GetIconBounds(); 1559 gfx::Rect bounds = GetIconBounds();
1542 if (bounds.IsEmpty()) 1560 if (bounds.IsEmpty())
1543 return; 1561 return;
1544 1562
1545 // Extends the area to the bottom when sad_favicon is 1563 // Extends the area to the bottom when sad_favicon is
1546 // animating. 1564 // animating.
1547 if (IsPerformingCrashAnimation()) 1565 if (IsPerformingCrashAnimation())
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 const gfx::ImageSkia& image) { 1630 const gfx::ImageSkia& image) {
1613 DCHECK_NE(scale_factor, ui::SCALE_FACTOR_NONE); 1631 DCHECK_NE(scale_factor, ui::SCALE_FACTOR_NONE);
1614 ImageCacheEntry entry; 1632 ImageCacheEntry entry;
1615 entry.resource_id = resource_id; 1633 entry.resource_id = resource_id;
1616 entry.scale_factor = scale_factor; 1634 entry.scale_factor = scale_factor;
1617 entry.image = image; 1635 entry.image = image;
1618 image_cache_->push_front(entry); 1636 image_cache_->push_front(entry);
1619 if (image_cache_->size() > kMaxImageCacheSize) 1637 if (image_cache_->size() > kMaxImageCacheSize)
1620 image_cache_->pop_back(); 1638 image_cache_->pop_back();
1621 } 1639 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/tabs/tab.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698