| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> | 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 #include "platform/SharedBuffer.h" | 52 #include "platform/SharedBuffer.h" |
| 53 #include "platform/UserGestureIndicator.h" | 53 #include "platform/UserGestureIndicator.h" |
| 54 #include "platform/network/ResourceError.h" | 54 #include "platform/network/ResourceError.h" |
| 55 #include "platform/network/ResourceRequest.h" | 55 #include "platform/network/ResourceRequest.h" |
| 56 #include "platform/network/ResourceResponse.h" | 56 #include "platform/network/ResourceResponse.h" |
| 57 | 57 |
| 58 namespace blink { | 58 namespace blink { |
| 59 | 59 |
| 60 class FrontendMenuProvider final : public ContextMenuProvider { | 60 class FrontendMenuProvider final : public ContextMenuProvider { |
| 61 public: | 61 public: |
| 62 static PassRefPtr<FrontendMenuProvider> create(InspectorFrontendHost* fronte
ndHost, ScriptValue frontendApiObject, const Vector<ContextMenuItem>& items) | 62 static PassRefPtrWillBeRawPtr<FrontendMenuProvider> create(InspectorFrontend
Host* frontendHost, ScriptValue frontendApiObject, const Vector<ContextMenuItem>
& items) |
| 63 { | 63 { |
| 64 return adoptRef(new FrontendMenuProvider(frontendHost, frontendApiObject
, items)); | 64 return adoptRefWillBeNoop(new FrontendMenuProvider(frontendHost, fronten
dApiObject, items)); |
| 65 } |
| 66 |
| 67 virtual ~FrontendMenuProvider() |
| 68 { |
| 69 // Verify that this menu provider has been detached. |
| 70 ASSERT(!m_frontendHost); |
| 71 } |
| 72 |
| 73 virtual void trace(Visitor* visitor) override |
| 74 { |
| 75 visitor->trace(m_frontendHost); |
| 76 ContextMenuProvider::trace(visitor); |
| 65 } | 77 } |
| 66 | 78 |
| 67 void disconnect() | 79 void disconnect() |
| 68 { | 80 { |
| 69 m_frontendApiObject = ScriptValue(); | 81 m_frontendApiObject = ScriptValue(); |
| 70 m_frontendHost = 0; | 82 m_frontendHost = nullptr; |
| 71 } | 83 } |
| 72 | 84 |
| 73 private: | 85 virtual void contextMenuCleared() override |
| 74 FrontendMenuProvider(InspectorFrontendHost* frontendHost, ScriptValue fronte
ndApiObject, const Vector<ContextMenuItem>& items) | |
| 75 : m_frontendHost(frontendHost) | |
| 76 , m_frontendApiObject(frontendApiObject) | |
| 77 , m_items(items) | |
| 78 { | 86 { |
| 79 } | 87 if (m_frontendHost) { |
| 88 ScriptFunctionCall function(m_frontendApiObject, "contextMenuCleared
"); |
| 89 function.call(); |
| 80 | 90 |
| 81 virtual ~FrontendMenuProvider() | 91 m_frontendHost->clearMenuProvider(); |
| 82 { | 92 m_frontendHost = nullptr; |
| 83 contextMenuCleared(); | 93 } |
| 94 m_items.clear(); |
| 84 } | 95 } |
| 85 | 96 |
| 86 virtual void populateContextMenu(ContextMenu* menu) override | 97 virtual void populateContextMenu(ContextMenu* menu) override |
| 87 { | 98 { |
| 88 for (size_t i = 0; i < m_items.size(); ++i) | 99 for (size_t i = 0; i < m_items.size(); ++i) |
| 89 menu->appendItem(m_items[i]); | 100 menu->appendItem(m_items[i]); |
| 90 } | 101 } |
| 91 | 102 |
| 92 virtual void contextMenuItemSelected(const ContextMenuItem* item) override | 103 virtual void contextMenuItemSelected(const ContextMenuItem* item) override |
| 93 { | 104 { |
| 94 if (m_frontendHost) { | 105 if (!m_frontendHost) |
| 95 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGes
ture); | 106 return; |
| 96 int itemNumber = item->action() - ContextMenuItemBaseCustomTag; | |
| 97 | 107 |
| 98 ScriptFunctionCall function(m_frontendApiObject, "contextMenuItemSel
ected"); | 108 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture
); |
| 99 function.appendArgument(itemNumber); | 109 int itemNumber = item->action() - ContextMenuItemBaseCustomTag; |
| 100 function.call(); | 110 |
| 101 } | 111 ScriptFunctionCall function(m_frontendApiObject, "contextMenuItemSelecte
d"); |
| 112 function.appendArgument(itemNumber); |
| 113 function.call(); |
| 102 } | 114 } |
| 103 | 115 |
| 104 virtual void contextMenuCleared() override | 116 private: |
| 117 FrontendMenuProvider(InspectorFrontendHost* frontendHost, ScriptValue fronte
ndApiObject, const Vector<ContextMenuItem>& items) |
| 118 : m_frontendHost(frontendHost) |
| 119 , m_frontendApiObject(frontendApiObject) |
| 120 , m_items(items) |
| 105 { | 121 { |
| 106 if (m_frontendHost) { | |
| 107 ScriptFunctionCall function(m_frontendApiObject, "contextMenuCleared
"); | |
| 108 function.call(); | |
| 109 | |
| 110 m_frontendHost->m_menuProvider = 0; | |
| 111 } | |
| 112 m_items.clear(); | |
| 113 m_frontendHost = 0; | |
| 114 } | 122 } |
| 115 | 123 |
| 116 InspectorFrontendHost* m_frontendHost; | 124 RawPtrWillBeMember<InspectorFrontendHost> m_frontendHost; |
| 117 ScriptValue m_frontendApiObject; | 125 ScriptValue m_frontendApiObject; |
| 126 |
| 127 // FIXME: Oilpan: remove when http://crbug.com/424962 Blink GC plugin |
| 128 // changes have been deployed. ContextMenuItem triggers looping behavior. |
| 129 GC_PLUGIN_IGNORE("crbug.com/424962") |
| 118 Vector<ContextMenuItem> m_items; | 130 Vector<ContextMenuItem> m_items; |
| 119 }; | 131 }; |
| 120 | 132 |
| 121 InspectorFrontendHost::InspectorFrontendHost(InspectorFrontendClient* client, Pa
ge* frontendPage) | 133 InspectorFrontendHost::InspectorFrontendHost(InspectorFrontendClient* client, Pa
ge* frontendPage) |
| 122 : m_client(client) | 134 : m_client(client) |
| 123 , m_frontendPage(frontendPage) | 135 , m_frontendPage(frontendPage) |
| 124 , m_menuProvider(0) | 136 , m_menuProvider(nullptr) |
| 125 { | 137 { |
| 126 } | 138 } |
| 127 | 139 |
| 128 InspectorFrontendHost::~InspectorFrontendHost() | 140 InspectorFrontendHost::~InspectorFrontendHost() |
| 129 { | 141 { |
| 130 ASSERT(!m_client); | 142 ASSERT(!m_client); |
| 131 } | 143 } |
| 132 | 144 |
| 133 void InspectorFrontendHost::trace(Visitor* visitor) | 145 void InspectorFrontendHost::trace(Visitor* visitor) |
| 134 { | 146 { |
| 135 visitor->trace(m_frontendPage); | 147 visitor->trace(m_frontendPage); |
| 148 visitor->trace(m_menuProvider); |
| 136 } | 149 } |
| 137 | 150 |
| 138 void InspectorFrontendHost::disconnectClient() | 151 void InspectorFrontendHost::disconnectClient() |
| 139 { | 152 { |
| 140 m_client = 0; | 153 m_client = 0; |
| 141 if (m_menuProvider) | 154 if (m_menuProvider) { |
| 142 m_menuProvider->disconnect(); | 155 m_menuProvider->disconnect(); |
| 156 m_menuProvider = nullptr; |
| 157 } |
| 143 m_frontendPage = nullptr; | 158 m_frontendPage = nullptr; |
| 144 } | 159 } |
| 145 | 160 |
| 146 void InspectorFrontendHost::setZoomFactor(float zoom) | 161 void InspectorFrontendHost::setZoomFactor(float zoom) |
| 147 { | 162 { |
| 148 if (!m_frontendPage) | 163 if (!m_frontendPage) |
| 149 return; | 164 return; |
| 150 if (LocalFrame* frame = m_frontendPage->deprecatedLocalMainFrame()) | 165 if (LocalFrame* frame = m_frontendPage->deprecatedLocalMainFrame()) |
| 151 frame->setPageAndTextZoomFactors(zoom, 1); | 166 frame->setPageAndTextZoomFactors(zoom, 1); |
| 152 } | 167 } |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 m_client->sendMessageToEmbedder(escapeUnicodeNonCharacters(message)); | 224 m_client->sendMessageToEmbedder(escapeUnicodeNonCharacters(message)); |
| 210 } | 225 } |
| 211 | 226 |
| 212 void InspectorFrontendHost::showContextMenu(Page* page, float x, float y, const
Vector<ContextMenuItem>& items) | 227 void InspectorFrontendHost::showContextMenu(Page* page, float x, float y, const
Vector<ContextMenuItem>& items) |
| 213 { | 228 { |
| 214 ASSERT(m_frontendPage); | 229 ASSERT(m_frontendPage); |
| 215 ScriptState* frontendScriptState = ScriptState::forMainWorld(m_frontendPage-
>deprecatedLocalMainFrame()); | 230 ScriptState* frontendScriptState = ScriptState::forMainWorld(m_frontendPage-
>deprecatedLocalMainFrame()); |
| 216 ScriptValue frontendApiObject = frontendScriptState->getFromGlobalObject("In
spectorFrontendAPI"); | 231 ScriptValue frontendApiObject = frontendScriptState->getFromGlobalObject("In
spectorFrontendAPI"); |
| 217 ASSERT(frontendApiObject.isObject()); | 232 ASSERT(frontendApiObject.isObject()); |
| 218 | 233 |
| 219 RefPtr<FrontendMenuProvider> menuProvider = FrontendMenuProvider::create(thi
s, frontendApiObject, items); | 234 RefPtrWillBeRawPtr<FrontendMenuProvider> menuProvider = FrontendMenuProvider
::create(this, frontendApiObject, items); |
| 220 m_menuProvider = menuProvider.get(); | 235 m_menuProvider = menuProvider.get(); |
| 221 float zoom = page->deprecatedLocalMainFrame()->pageZoomFactor(); | 236 float zoom = page->deprecatedLocalMainFrame()->pageZoomFactor(); |
| 222 page->inspectorController().showContextMenu(x * zoom, y * zoom, menuProvider
); | 237 page->inspectorController().showContextMenu(x * zoom, y * zoom, menuProvider
); |
| 223 } | 238 } |
| 224 | 239 |
| 225 void InspectorFrontendHost::showContextMenu(Event* event, const Vector<ContextMe
nuItem>& items) | 240 void InspectorFrontendHost::showContextMenu(Event* event, const Vector<ContextMe
nuItem>& items) |
| 226 { | 241 { |
| 227 if (!event) | 242 if (!event) |
| 228 return; | 243 return; |
| 229 | 244 |
| 230 ASSERT(m_frontendPage); | 245 ASSERT(m_frontendPage); |
| 231 ScriptState* frontendScriptState = ScriptState::forMainWorld(m_frontendPage-
>deprecatedLocalMainFrame()); | 246 ScriptState* frontendScriptState = ScriptState::forMainWorld(m_frontendPage-
>deprecatedLocalMainFrame()); |
| 232 ScriptValue frontendApiObject = frontendScriptState->getFromGlobalObject("In
spectorFrontendAPI"); | 247 ScriptValue frontendApiObject = frontendScriptState->getFromGlobalObject("In
spectorFrontendAPI"); |
| 233 ASSERT(frontendApiObject.isObject()); | 248 ASSERT(frontendApiObject.isObject()); |
| 234 | 249 |
| 235 Page* targetPage = m_frontendPage; | 250 Page* targetPage = m_frontendPage; |
| 236 if (event->target() && event->target()->executionContext() && event->target(
)->executionContext()->executingWindow()) { | 251 if (event->target() && event->target()->executionContext() && event->target(
)->executionContext()->executingWindow()) { |
| 237 LocalDOMWindow* window = event->target()->executionContext()->executingW
indow(); | 252 LocalDOMWindow* window = event->target()->executionContext()->executingW
indow(); |
| 238 if (window->document() && window->document()->page()) | 253 if (window->document() && window->document()->page()) |
| 239 targetPage = window->document()->page(); | 254 targetPage = window->document()->page(); |
| 240 } | 255 } |
| 241 | 256 |
| 242 RefPtr<FrontendMenuProvider> menuProvider = FrontendMenuProvider::create(thi
s, frontendApiObject, items); | 257 RefPtrWillBeRawPtr<FrontendMenuProvider> menuProvider = FrontendMenuProvider
::create(this, frontendApiObject, items); |
| 243 targetPage->contextMenuController().showContextMenu(event, menuProvider); | 258 targetPage->contextMenuController().showContextMenu(event, menuProvider); |
| 244 m_menuProvider = menuProvider.get(); | 259 m_menuProvider = menuProvider.get(); |
| 245 } | 260 } |
| 246 | 261 |
| 247 String InspectorFrontendHost::getSelectionBackgroundColor() | 262 String InspectorFrontendHost::getSelectionBackgroundColor() |
| 248 { | 263 { |
| 249 return RenderTheme::theme().activeSelectionBackgroundColor().serialized(); | 264 return RenderTheme::theme().activeSelectionBackgroundColor().serialized(); |
| 250 } | 265 } |
| 251 | 266 |
| 252 String InspectorFrontendHost::getSelectionForegroundColor() | 267 String InspectorFrontendHost::getSelectionForegroundColor() |
| 253 { | 268 { |
| 254 return RenderTheme::theme().activeSelectionForegroundColor().serialized(); | 269 return RenderTheme::theme().activeSelectionForegroundColor().serialized(); |
| 255 } | 270 } |
| 256 | 271 |
| 257 bool InspectorFrontendHost::isUnderTest() | 272 bool InspectorFrontendHost::isUnderTest() |
| 258 { | 273 { |
| 259 return m_client && m_client->isUnderTest(); | 274 return m_client && m_client->isUnderTest(); |
| 260 } | 275 } |
| 261 | 276 |
| 262 bool InspectorFrontendHost::isHostedMode() | 277 bool InspectorFrontendHost::isHostedMode() |
| 263 { | 278 { |
| 264 return false; | 279 return false; |
| 265 } | 280 } |
| 266 | 281 |
| 267 } // namespace blink | 282 } // namespace blink |
| OLD | NEW |