From 5d99933ddc54cd058839b552e635a8d799d7af98 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 29 May 2015 15:01:32 -0400 Subject: [PATCH] implement cef_display_handler::on_favicon_urlchange also fixes #6166 but with more fix than last fix --- ports/cef/browser.rs | 3 +++ ports/cef/window.rs | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ports/cef/browser.rs b/ports/cef/browser.rs index 4dded7202c0..dd8f99f1295 100644 --- a/ports/cef/browser.rs +++ b/ports/cef/browser.rs @@ -111,6 +111,8 @@ pub struct ServoCefBrowser { pub forward: Cell, /// whether the browser is loading pub loading: Cell, + /// a vec of favicon urls for the current page + pub favicons: RefCell>, /// the display system window handle: only to be used with host.get_window_handle() window_handle: cef_window_handle_t, @@ -154,6 +156,7 @@ impl ServoCefBrowser { back: Cell::new(false), forward: Cell::new(false), loading: Cell::new(false), + favicons: RefCell::new(vec!()), window_handle: window_handle, } } diff --git a/ports/cef/window.rs b/ports/cef/window.rs index d9fef3d215b..4ec98a0ac15 100644 --- a/ports/cef/window.rs +++ b/ports/cef/window.rs @@ -316,11 +316,16 @@ impl WindowMethods for Window { } } - fn set_favicon(&self, _: Url) { + fn set_favicon(&self, url: Url) { + let browser = self.cef_browser.borrow(); + let browser = match *browser { + None => return, + Some(ref browser) => browser, + }; + browser.downcast().favicons.borrow_mut().push(url.to_string().clone()); } fn load_start(&self, back: bool, forward: bool) { - // FIXME(pcwalton): The status code 200 is a lie. let browser = self.cef_browser.borrow(); let browser = match *browser { None => return, @@ -329,6 +334,7 @@ impl WindowMethods for Window { browser.downcast().loading.set(true); browser.downcast().back.set(back); browser.downcast().forward.set(forward); + browser.downcast().favicons.borrow_mut().clear(); if check_ptr_exist!(browser.get_host().get_client(), get_load_handler) && check_ptr_exist!(browser.get_host().get_client().get_load_handler(), on_loading_state_change) { browser.get_host() @@ -348,6 +354,10 @@ impl WindowMethods for Window { browser.downcast().loading.set(false); browser.downcast().back.set(back); browser.downcast().forward.set(forward); + if check_ptr_exist!(browser.get_host().get_client(), get_display_handler) && + check_ptr_exist!(browser.get_host().get_client().get_display_handler(), on_favicon_urlchange) { + browser.get_host().get_client().get_display_handler().on_favicon_urlchange((*browser).clone(), browser.downcast().favicons.borrow().clone()); + } if check_ptr_exist!(browser.get_host().get_client(), get_load_handler) && check_ptr_exist!(browser.get_host().get_client().get_load_handler(), on_loading_state_change) { browser.get_host()