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

Side by Side Diff: chrome/browser/icon_loader_auralinux.cc

Issue 2586003002: patch from issue 2577273002 at patchset 20001 (http://crrev.com/2577273002#ps20001)
Patch Set: Convert to OnceCallback, and make it compile at least on Linux. Created 4 years 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
« no previous file with comments | « chrome/browser/icon_loader.cc ('k') | chrome/browser/icon_loader_chromeos.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/icon_loader.h" 5 #include "chrome/browser/icon_loader.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/nix/mime_util_xdg.h" 9 #include "base/nix/mime_util_xdg.h"
10 #include "ui/views/linux_ui/linux_ui.h" 10 #include "ui/views/linux_ui/linux_ui.h"
(...skipping 27 matching lines...) Expand all
38 NOTREACHED(); 38 NOTREACHED();
39 } 39 }
40 40
41 views::LinuxUI* ui = views::LinuxUI::instance(); 41 views::LinuxUI* ui = views::LinuxUI::instance();
42 if (ui) { 42 if (ui) {
43 gfx::Image image = ui->GetIconForContentType(group_, size_pixels); 43 gfx::Image image = ui->GetIconForContentType(group_, size_pixels);
44 if (!image.IsEmpty()) 44 if (!image.IsEmpty())
45 image_.reset(new gfx::Image(image)); 45 image_.reset(new gfx::Image(image));
46 } 46 }
47 47
48 // TODO(jbroman): This should get better once PostTask can take a
49 // OnceCallback, which seems the "right" thing to do.
50 //
51 // The root of the error in doing this the obvious way is that the functor
52 // (first) argument to Bind isn't moved (rather a const& is used, because
53 // running a repeating callback doesn't move from it). We could probably make
54 // it work (by adjusting Invoker<...>::Run to move under some circumstances,
55 // but it'd be a hack.
56 //
57 // This is a hack that does essentially that: it moves the functor like the
58 // arguments are moved, even though that's not really safe if the callback is
59 // invoked more than once.
48 target_task_runner_->PostTask( 60 target_task_runner_->PostTask(
49 FROM_HERE, base::Bind(&IconLoader::NotifyDelegate, this)); 61 FROM_HERE,
62 base::Bind(
63 [](IconLoadedCallback callback, IconLoader* loader,
64 std::unique_ptr<gfx::Image> image, const IconGroup& group) {
65 std::move(callback).Run(loader, std::move(image), group);
66 },
67 base::Passed(&callback_), base::Unretained(this),
68 base::Passed(&image_), group_));
50 } 69 }
OLDNEW
« no previous file with comments | « chrome/browser/icon_loader.cc ('k') | chrome/browser/icon_loader_chromeos.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698