#include "chrome/browser/printing/print_view_manager_basic.h"
#include "chrome/browser/printing/print_preview_message_handler.h"
#include "content/common/view_messages.h"
+#include "content/public/browser/browser_plugin_guest_manager.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/browser/navigation_details.h"
new net::StaticHttpUserAgentSettings("en-us,en", user_agent));
}
+bool NotifyZoomLevelChanged(
+ double level, content::WebContents* guest_web_contents) {
+ guest_web_contents->SendToAllFrames(
+ new AtomViewMsg_SetZoomLevel(MSG_ROUTING_NONE, level));
+
+ // Return false to iterate over all guests.
+ return false;
+}
+
} // namespace
namespace mate {
IPC_MESSAGE_HANDLER(AtomViewHostMsg_Message, OnRendererMessage)
IPC_MESSAGE_HANDLER_DELAY_REPLY(AtomViewHostMsg_Message_Sync,
OnRendererMessageSync)
+ IPC_MESSAGE_HANDLER(AtomViewHostMsg_ZoomLevelChanged, OnZoomLevelChanged)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
EmitWithSender(base::UTF16ToUTF8(channel), web_contents(), message, args);
}
+void WebContents::OnZoomLevelChanged(double level) {
+ auto manager = web_contents()->GetBrowserContext()->GetGuestManager();
+ if (!manager)
+ return;
+ manager->ForEachGuest(web_contents(),
+ base::Bind(&NotifyZoomLevelChanged,
+ level));
+}
+
// static
mate::Handle<WebContents> WebContents::CreateFrom(
v8::Isolate* isolate, content::WebContents* web_contents) {
const base::ListValue& args,
IPC::Message* message);
+ // Called when guests need to be notified of
+ // embedders' zoom level change.
+ void OnZoomLevelChanged(double level);
+
v8::Global<v8::Value> session_;
v8::Global<v8::Value> devtools_web_contents_;
base::ListValue /* arguments */,
base::string16 /* result (in JSON) */)
+IPC_MESSAGE_ROUTED1(AtomViewHostMsg_ZoomLevelChanged,
+ double /* level */)
+
+IPC_MESSAGE_ROUTED1(AtomViewMsg_SetZoomLevel,
+ double /* level */)
+
IPC_MESSAGE_ROUTED2(AtomViewMsg_Message,
base::string16 /* channel */,
base::ListValue /* arguments */)
#include "atom/renderer/api/atom_api_web_frame.h"
+#include "atom/common/api/api_messages.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "atom/common/native_mate_converters/string16_converter.h"
#include "atom/renderer/api/atom_api_spell_check_client.h"
#include "content/public/renderer/render_frame.h"
+#include "content/public/renderer/render_view.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
#include "third_party/WebKit/public/web/WebDocument.h"
}
double WebFrame::SetZoomLevel(double level) {
+ auto render_view = content::RenderView::FromWebView(web_frame_->view());
+ // Notify guests if any for zoom level change.
+ render_view->Send(
+ new AtomViewHostMsg_ZoomLevelChanged(MSG_ROUTING_NONE, level));
return web_frame_->view()->setZoomLevel(level);
}
#include <string>
+#include "atom/common/api/api_messages.h"
#include "atom/common/api/atom_bindings.h"
#include "atom/common/node_bindings.h"
#include "atom/common/node_includes.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_frame_observer.h"
#include "content/public/renderer/render_thread.h"
+#include "ipc/ipc_message_macros.h"
#include "third_party/WebKit/public/web/WebCustomElement.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
#include "third_party/WebKit/public/web/WebPluginParams.h"
#include "third_party/WebKit/public/web/WebKit.h"
#include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
+#include "third_party/WebKit/public/web/WebView.h"
#if defined(OS_WIN)
#include <shlobj.h>
render_frame()->GetWebFrame(), context);
}
+ bool OnMessageReceived(const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(AtomRenderFrameObserver, message)
+ IPC_MESSAGE_HANDLER(AtomViewMsg_SetZoomLevel, OnSetZoomLevel)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+
+ return handled;
+ }
+
+ void OnSetZoomLevel(double level) {
+ auto view = render_frame()->GetWebFrame()->view();
+ if (view)
+ view->setZoomLevel(level);
+ }
+
private:
AtomRendererClient* renderer_client_;