Index: build.xml
===================================================================
--- build.xml (revision 1761076)
+++ build.xml (working copy)
@@ -349,8 +349,8 @@
-
-
+
+
Index: src/components/org/apache/jmeter/visualizers/RenderInBrowser.java
===================================================================
--- src/components/org/apache/jmeter/visualizers/RenderInBrowser.java (revision 0)
+++ src/components/org/apache/jmeter/visualizers/RenderInBrowser.java (revision 0)
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jmeter.visualizers;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+import javafx.application.Platform;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.concurrent.Worker.State;
+import javafx.embed.swing.JFXPanel;
+import javafx.event.EventHandler;
+import javafx.scene.Scene;
+import javafx.scene.web.WebEngine;
+import javafx.scene.web.WebEvent;
+import javafx.scene.web.WebView;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.SwingUtilities;
+
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.jmeter.util.JMeterUtils;
+
+/**
+ * {@link ResultRenderer} implementation that uses JAVAFX WebEngine to render as browser do
+ */
+public class RenderInBrowser extends SamplerResultTab implements ResultRenderer {
+
+ private final JFXPanel jfxPanel = new JFXPanel();
+ private WebEngine engine;
+ private final JLabel lblStatus = new JLabel();
+ private final JProgressBar progressBar = new JProgressBar();
+
+ private JPanel browserPanel;
+
+ /** {@inheritDoc} */
+ @Override
+ public void renderResult(SampleResult sampleResult) {
+ String response = ViewResultsFullVisualizer
+ .getResponseAsString(sampleResult);
+ showRenderedResponse(response, sampleResult);
+ }
+
+ protected void showRenderedResponse(String response, SampleResult res) {
+ showRenderedResponse(response, res, false);
+ }
+
+ protected void showRenderedResponse(String response, SampleResult res,
+ boolean embedded) {
+ if (response == null) {
+ results.setText("");
+ return;
+ }
+
+ int htmlIndex = response.indexOf(" //
+ // $NON-NLS-1$
+
+ // Look for a case variation
+ if (htmlIndex < 0) {
+ htmlIndex = response.indexOf(">() {
+ @Override
+ public void handle(final WebEvent event) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ lblStatus.setText(event.getData());
+ }
+ });
+ }
+ });
+
+ engine.getLoadWorker().workDoneProperty()
+ .addListener(new ChangeListener() {
+ @Override
+ public void changed(
+ ObservableValue extends Number> observableValue,
+ Number oldValue, final Number newValue) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ progressBar.setValue(newValue
+ .intValue());
+ }
+ });
+ }
+ });
+
+ engine.getLoadWorker().exceptionProperty()
+ .addListener(new ChangeListener() {
+
+ @Override
+ public void changed(
+ ObservableValue extends Throwable> o,
+ Throwable old, final Throwable value) {
+ if (engine.getLoadWorker().getState() == State.FAILED) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ JOptionPane
+ .showMessageDialog(
+ resultsScrollPane,
+ (value != null) ? engine
+ .getLocation()
+ + "\n"
+ + value.getMessage()
+ : engine.getLocation()
+ + "\nUnexpected error.",
+ "Loading error...",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ });
+ }
+ }
+ });
+ jfxPanel.setScene(new Scene(view));
+ }
+ });
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String toString() {
+ return JMeterUtils.getResString("view_results_render_browser"); // $NON-NLS-1$
+ }
+
+}
Index: src/core/org/apache/jmeter/resources/messages.properties
===================================================================
--- src/core/org/apache/jmeter/resources/messages.properties (revision 1761076)
+++ src/core/org/apache/jmeter/resources/messages.properties (working copy)
@@ -1246,7 +1246,8 @@
view_results_latency=Latency:
view_results_connect_time=Connect Time:
view_results_load_time=Load time:
-view_results_render=Render:
+view_results_render=Render:
+view_results_render_browser=Browser
view_results_render_document=Document
view_results_render_html=HTML
view_results_render_html_embedded=HTML (download resources)
Index: src/core/org/apache/jmeter/resources/messages_fr.properties
===================================================================
--- src/core/org/apache/jmeter/resources/messages_fr.properties (revision 1761076)
+++ src/core/org/apache/jmeter/resources/messages_fr.properties (working copy)
@@ -1231,7 +1231,8 @@
view_results_in_table=Tableau de r\u00E9sultats
view_results_latency=Latence \:
view_results_load_time=Temps de r\u00E9ponse \:
-view_results_render=Rendu \:
+view_results_render=Rendu \:
+view_results_render_browser=Navigateur
view_results_render_document=Document
view_results_render_html=HTML
view_results_render_html_embedded=HTML et ressources