Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / inspector / InspectorPageAgent.cpp
index 5486d3a..f7389da 100644 (file)
 #include "core/fetch/ScriptResource.h"
 #include "core/frame/FrameView.h"
 #include "core/frame/LocalFrame.h"
-#include "core/frame/PageConsole.h"
 #include "core/frame/Settings.h"
 #include "core/html/HTMLFrameOwnerElement.h"
 #include "core/html/imports/HTMLImport.h"
-#include "core/html/imports/HTMLImportChild.h"
+#include "core/html/imports/HTMLImportLoader.h"
+#include "core/html/imports/HTMLImportsController.h"
 #include "core/html/parser/TextResourceDecoder.h"
 #include "core/inspector/ContentSearchUtils.h"
 #include "core/inspector/DOMPatchSupport.h"
@@ -274,14 +274,18 @@ TypeBuilder::Page::ResourceType::Enum InspectorPageAgent::resourceTypeJson(Inspe
     switch (resourceType) {
     case DocumentResource:
         return TypeBuilder::Page::ResourceType::Document;
+    case FontResource:
+        return TypeBuilder::Page::ResourceType::Font;
     case ImageResource:
         return TypeBuilder::Page::ResourceType::Image;
-    case Font:
-        return TypeBuilder::Page::ResourceType::Font;
-    case StylesheetResource:
-        return TypeBuilder::Page::ResourceType::Stylesheet;
+    case MediaResource:
+        return TypeBuilder::Page::ResourceType::Media;
     case ScriptResource:
         return TypeBuilder::Page::ResourceType::Script;
+    case StylesheetResource:
+        return TypeBuilder::Page::ResourceType::Stylesheet;
+    case TextTrackResource:
+        return TypeBuilder::Page::ResourceType::TextTrack;
     case XHRResource:
         return TypeBuilder::Page::ResourceType::XHR;
     case WebSocketResource:
@@ -298,7 +302,11 @@ InspectorPageAgent::ResourceType InspectorPageAgent::cachedResourceType(const Re
     case Resource::Image:
         return InspectorPageAgent::ImageResource;
     case Resource::Font:
-        return InspectorPageAgent::Font;
+        return InspectorPageAgent::FontResource;
+    case Resource::Media:
+        return InspectorPageAgent::MediaResource;
+    case Resource::TextTrack:
+        return InspectorPageAgent::TextTrackResource;
     case Resource::CSSStyleSheet:
         // Fall through.
     case Resource::XSLStyleSheet:
@@ -334,6 +342,10 @@ InspectorPageAgent::InspectorPageAgent(Page* page, InjectedScriptManager* inject
     , m_ignoreScriptsEnabledNotification(false)
     , m_deviceMetricsOverridden(false)
     , m_emulateViewportEnabled(false)
+    , m_touchEmulationEnabled(false)
+    , m_originalTouchEnabled(false)
+    , m_originalDeviceSupportsMouse(false)
+    , m_originalDeviceSupportsTouch(false)
     , m_embedderTextAutosizingEnabled(m_page->settings().textAutosizingEnabled())
     , m_embedderFontScaleFactor(m_page->settings().deviceScaleAdjustment())
 {
@@ -362,7 +374,6 @@ void InspectorPageAgent::clearFrontend()
 {
     ErrorString error;
     disable(&error);
-    updateTouchEventEmulationInPage(false);
     m_frontend = 0;
 }
 
@@ -428,6 +439,11 @@ void InspectorPageAgent::disable(ErrorString*)
     setShowScrollBottleneckRects(0, false);
     setShowViewportSizeOnResize(0, false, 0);
 
+    if (m_state->getBoolean(PageAgentState::touchEventEmulationEnabled)) {
+        updateTouchEventEmulationInPage(false);
+        m_state->setBoolean(PageAgentState::touchEventEmulationEnabled, false);
+    }
+
     if (!deviceMetricsChanged(0, 0, 0, false, false, 1, false))
         return;
 
@@ -539,37 +555,30 @@ static void cachedResourcesForDocument(Document* document, Vector<Resource*>& re
     }
 }
 
-static Vector<Resource*> cachedResourcesForFrame(LocalFrame* frame)
+static Vector<Document*> importsForFrame(LocalFrame* frame)
 {
-    Vector<Resource*> result;
+    Vector<Document*> result;
     Document* rootDocument = frame->document();
 
-    if (HTMLImport* rootImport = rootDocument->import()) {
-        for (HTMLImport* import = rootImport; import; import = traverseNext(import)) {
-            if (import->ownsLoader() || import->isRoot()) {
-                if (Document* document = import->document())
-                    cachedResourcesForDocument(document, result);
-            }
+    if (HTMLImportsController* controller = rootDocument->importsController()) {
+        for (size_t i = 0; i < controller->loaderCount(); ++i) {
+            if (Document* document = controller->loaderAt(i)->document())
+                result.append(document);
         }
-    } else {
-        cachedResourcesForDocument(rootDocument, result);
     }
 
     return result;
 }
 
-static Vector<HTMLImportChild*> importsForFrame(LocalFrame* frame)
+static Vector<Resource*> cachedResourcesForFrame(LocalFrame* frame)
 {
-    Vector<HTMLImportChild*> result;
+    Vector<Resource*> result;
     Document* rootDocument = frame->document();
+    Vector<Document*> loaders = importsForFrame(frame);
 
-    if (HTMLImport* rootImport = rootDocument->import()) {
-        // Skips root, that isn't a real import but just a placeholder.
-        for (HTMLImport* import = traverseNext(rootImport); import; import = traverseNext(import)) {
-            if (import->ownsLoader() && import->document())
-                result.append(toHTMLImportChild(import));
-        }
-    }
+    cachedResourcesForDocument(rootDocument, result);
+    for (size_t i = 0; i < loaders.size(); ++i)
+        cachedResourcesForDocument(loaders[i], result);
 
     return result;
 }
@@ -820,7 +829,7 @@ void InspectorPageAgent::setScriptExecutionDisabled(ErrorString*, bool value)
     }
 }
 
-void InspectorPageAgent::didClearWindowObjectInMainWorld(LocalFrame* frame)
+void InspectorPageAgent::didClearDocumentOfWindowObject(LocalFrame* frame)
 {
     if (frame == m_page->mainFrame())
         m_injectedScriptManager->discardInjectedScripts();
@@ -1052,7 +1061,7 @@ void InspectorPageAgent::didResizeMainFrame()
     m_frontend->frameResized();
 }
 
-void InspectorPageAgent::didRecalculateStyle()
+void InspectorPageAgent::didRecalculateStyle(int)
 {
     if (m_enabled)
         m_overlay->update();
@@ -1109,13 +1118,13 @@ PassRefPtr<TypeBuilder::Page::FrameResourceTree> InspectorPageAgent::buildObject
         subresources->addItem(resourceObject);
     }
 
-    Vector<HTMLImportChild*> allImports = importsForFrame(frame);
-    for (Vector<HTMLImportChild*>::const_iterator it = allImports.begin(); it != allImports.end(); ++it) {
-        HTMLImportChild* import = *it;
+    Vector<Document*> allImports = importsForFrame(frame);
+    for (Vector<Document*>::const_iterator it = allImports.begin(); it != allImports.end(); ++it) {
+        Document* import = *it;
         RefPtr<TypeBuilder::Page::FrameResourceTree::Resources> resourceObject = TypeBuilder::Page::FrameResourceTree::Resources::create()
             .setUrl(urlWithoutFragment(import->url()).string())
             .setType(resourceTypeJson(InspectorPageAgent::DocumentResource))
-            .setMimeType(import->document()->suggestedMIMEType());
+            .setMimeType(import->suggestedMIMEType());
         subresources->addItem(resourceObject);
     }
 
@@ -1150,6 +1159,9 @@ void InspectorPageAgent::updateViewMetrics(int width, int height, double deviceS
     if (m_deviceMetricsOverridden) {
         m_page->settings().setTextAutosizingEnabled(textAutosizingEnabled);
         m_page->settings().setDeviceScaleAdjustment(fontScaleFactor);
+    } else {
+        m_page->settings().setTextAutosizingEnabled(m_embedderTextAutosizingEnabled);
+        m_page->settings().setDeviceScaleAdjustment(m_embedderFontScaleFactor);
     }
 
     // FIXME: allow metrics override, fps counter and continuous painting at the same time: crbug.com/299837.
@@ -1159,15 +1171,38 @@ void InspectorPageAgent::updateViewMetrics(int width, int height, double deviceS
 
 void InspectorPageAgent::updateTouchEventEmulationInPage(bool enabled)
 {
-    m_state->setBoolean(PageAgentState::touchEventEmulationEnabled, enabled);
-    if (mainFrame() && mainFrame()->settings())
-        mainFrame()->settings()->setTouchEventEmulationEnabled(enabled);
+    if (!m_touchEmulationEnabled) {
+        m_originalTouchEnabled = RuntimeEnabledFeatures::touchEnabled();
+        m_originalDeviceSupportsMouse = m_page->settings().deviceSupportsMouse();
+        m_originalDeviceSupportsTouch = m_page->settings().deviceSupportsTouch();
+    }
+    RuntimeEnabledFeatures::setTouchEnabled(enabled ? true : m_originalTouchEnabled);
+    m_page->settings().setDeviceSupportsMouse(enabled ? false : m_originalDeviceSupportsMouse);
+    m_page->settings().setDeviceSupportsTouch(enabled ? true : m_originalDeviceSupportsTouch);
+    m_touchEmulationEnabled = enabled;
+    m_client->setTouchEventEmulationEnabled(enabled);
+    m_page->mainFrame()->view()->layout();
 }
 
-void InspectorPageAgent::setTouchEmulationEnabled(ErrorString*, bool enabled)
+void InspectorPageAgent::hasTouchInputs(ErrorString*, bool* result)
+{
+    *result = m_touchEmulationEnabled ? m_originalDeviceSupportsTouch : m_page->settings().deviceSupportsTouch();
+}
+
+void InspectorPageAgent::setTouchEmulationEnabled(ErrorString* error, bool enabled)
 {
     if (m_state->getBoolean(PageAgentState::touchEventEmulationEnabled) == enabled)
         return;
+
+    bool hasTouch = false;
+    hasTouchInputs(error, &hasTouch);
+    if (enabled && hasTouch) {
+        if (error)
+            *error = "Device already supports touch input";
+        return;
+    }
+
+    m_state->setBoolean(PageAgentState::touchEventEmulationEnabled, enabled);
     updateTouchEventEmulationInPage(enabled);
 }