Chromium Code Reviews| Index: chrome/browser/ui/cocoa/web_intent_picker_cocoa.mm |
| diff --git a/chrome/browser/ui/cocoa/web_intent_picker_cocoa.mm b/chrome/browser/ui/cocoa/web_intent_picker_cocoa.mm |
| index 03b5cdff89ec031ce5c7881c1d147f2a75a0bf74..c144c2072ec9358c9e065132662c6e5f35429d5f 100644 |
| --- a/chrome/browser/ui/cocoa/web_intent_picker_cocoa.mm |
| +++ b/chrome/browser/ui/cocoa/web_intent_picker_cocoa.mm |
| @@ -16,7 +16,10 @@ |
| #include "chrome/browser/ui/intents/web_intent_picker_delegate.h" |
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| #include "content/public/browser/web_contents.h" |
| +#include "grit/ui_resources.h" |
| #include "skia/ext/skia_utils_mac.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| +#include "ui/gfx/image/image.h" |
| using content::WebContents; |
| @@ -42,21 +45,29 @@ class InlineHtmlContentDelegate: public content::WebContentsDelegate { |
| // static |
| WebIntentPicker* WebIntentPicker::Create(Browser* browser, |
| TabContentsWrapper* wrapper, |
| - WebIntentPickerDelegate* delegate) { |
| - return new WebIntentPickerCocoa(browser, wrapper, delegate); |
| + WebIntentPickerDelegate* delegate, |
| + WebIntentPickerModel* model) { |
| + return new WebIntentPickerCocoa(browser, wrapper, delegate, model); |
| } |
| WebIntentPickerCocoa::WebIntentPickerCocoa() |
| - : delegate_(NULL), browser_(NULL), controller_(NULL) { |
| + : delegate_(NULL), |
| + model_(NULL), |
| + browser_(NULL), |
| + controller_(NULL) { |
| } |
| WebIntentPickerCocoa::WebIntentPickerCocoa(Browser* browser, |
| TabContentsWrapper* wrapper, |
| - WebIntentPickerDelegate* delegate) |
| - : delegate_(delegate), |
| - browser_(browser), |
| - controller_(NULL) { |
| + WebIntentPickerDelegate* delegate, |
| + WebIntentPickerModel* model) |
| + : delegate_(delegate), |
| + model_(model), |
| + browser_(browser), |
| + controller_(NULL) { |
| + model_->set_observer(this); |
| + |
| DCHECK(browser); |
| DCHECK(delegate); |
| NSWindow* parentWindow = browser->window()->GetNativeHandle(); |
| @@ -74,37 +85,51 @@ WebIntentPickerCocoa::WebIntentPickerCocoa(Browser* browser, |
| anchoredAt:anchor]; |
| } |
| -void WebIntentPickerCocoa::SetServiceURLs(const std::vector<GURL>& urls) { |
| +WebIntentPickerCocoa::~WebIntentPickerCocoa() { |
| + if (model_ != NULL) |
| + model_->set_observer(NULL); |
| +} |
| + |
| +void WebIntentPickerCocoa::Close() { |
| +} |
| + |
| +void WebIntentPickerCocoa::OnModelChanged(WebIntentPickerModel* model) { |
| DCHECK(controller_); |
| scoped_nsobject<NSMutableArray> urlArray( |
| - [[NSMutableArray alloc] initWithCapacity:urls.size()]); |
| + [[NSMutableArray alloc] initWithCapacity:model->GetItemCount()]); |
| + |
| + for (size_t i = 0; i < model->GetItemCount(); ++i) { |
| + const WebIntentPickerModel::Item& item = model->GetItemAt(i); |
| - for (std::vector<GURL>::const_iterator iter(urls.begin()); |
| - iter != urls.end(); ++iter) { |
| [urlArray addObject: |
| - [NSString stringWithUTF8String:iter->spec().c_str()]]; |
| + [NSString stringWithUTF8String:item.url.spec().c_str()]]; |
| } |
| [controller_ setServiceURLs:urlArray]; |
| } |
| -void WebIntentPickerCocoa::SetServiceIcon(size_t index, const SkBitmap& icon) { |
| +void WebIntentPickerCocoa::OnFaviconChanged(WebIntentPickerModel* model, |
| + size_t index) { |
| DCHECK(controller_); |
| - if (icon.empty()) |
| - return; |
| - NSImage* image = gfx::SkBitmapToNSImage(icon); |
| + const WebIntentPickerModel::Item& item = model->GetItemAt(index); |
| + NSImage* image; |
| + if (item.favicon.get() != NULL) { |
|
groby-ooo-7-16
2012/01/25 22:03:13
Can skip the "get" part - scoped_ptr has operator!
binji
2012/01/26 00:27:41
Done.
|
| + image = item.favicon->ToNSImage(); |
| + } else { |
| + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
|
groby-ooo-7-16
2012/01/25 22:03:13
I'd suggest moving that to the model instead - tha
binji
2012/01/26 00:27:41
Done.
|
| + image = rb.GetNativeImageNamed(IDR_DEFAULT_FAVICON); |
| + } |
| + |
| [controller_ replaceImageAtIndex:index withImage:image]; |
| } |
| -void WebIntentPickerCocoa::SetDefaultServiceIcon(size_t index) { |
| -} |
| +void WebIntentPickerCocoa::OnInlineDisposition(WebIntentPickerModel* model) { |
| + const WebIntentPickerModel::Item& item = model->GetItemAt( |
| + model->inline_disposition_index()); |
| + const GURL& url = item.url; |
| -void WebIntentPickerCocoa::Close() { |
| -} |
| - |
| -WebContents* WebIntentPickerCocoa::SetInlineDisposition(const GURL& url) { |
| - WebContents* web_contents = WebContents::Create( |
| + content::WebContents* web_contents = content::WebContents::Create( |
| browser_->profile(), NULL, MSG_ROUTING_NONE, NULL, NULL); |
| inline_disposition_tab_contents_.reset(new TabContentsWrapper(web_contents)); |
| inline_disposition_delegate_.reset(new InlineHtmlContentDelegate); |
| @@ -118,10 +143,8 @@ WebContents* WebIntentPickerCocoa::SetInlineDisposition(const GURL& url) { |
| [controller_ setInlineDispositionTabContents: |
| inline_disposition_tab_contents_.get()]; |
| - return inline_disposition_tab_contents_->web_contents(); |
| -} |
| -WebIntentPickerCocoa::~WebIntentPickerCocoa() { |
| + delegate_->OnInlineDispositionWebContentsCreated(web_contents); |
| } |
| void WebIntentPickerCocoa::OnCancelled() { |
| @@ -132,7 +155,9 @@ void WebIntentPickerCocoa::OnCancelled() { |
| void WebIntentPickerCocoa::OnServiceChosen(size_t index) { |
| DCHECK(delegate_); |
| - delegate_->OnServiceChosen(index); |
| + const WebIntentPickerModel::Item& item = model_->GetItemAt(index); |
| + |
|
groby-ooo-7-16
2012/01/25 22:03:13
Nit: delete empty line
binji
2012/01/26 00:27:41
Done.
|
| + delegate_->OnServiceChosen(index, item.disposition); |
| } |
| void WebIntentPickerCocoa::set_controller( |